使用简单WCF服务的未经授权HTTP请求

使用简单WCF服务的未经授权HTTP请求,wcf,Wcf,我们正在按照以下准则设置Restful WCF服务: 说明很好,我们已经成功地运行了测试版本,并在浏览器中显示了XML结果(在我们的例子中是Personrecords) 我们遇到的一个问题是,作者没有给我们带来更多的东西,只是在浏览器中显示XML 您可能认为,一旦结果以XML形式呈现给您,就很容易找到一个客户机,它可以将数据反序列化到您的Person类中 事实上,没那么容易。很多关于绑定和端点的问题让我们抓耳挠腮。。。我不确定我们是否已经完全掌握了。无论如何,过了一段时间,找到了一个有一半道理

我们正在按照以下准则设置Restful WCF服务:

说明很好,我们已经成功地运行了测试版本,并在浏览器中显示了XML结果(在我们的例子中是
Person
records)

我们遇到的一个问题是,作者没有给我们带来更多的东西,只是在浏览器中显示XML

您可能认为,一旦结果以XML形式呈现给您,就很容易找到一个客户机,它可以将数据反序列化到您的
Person
类中

事实上,没那么容易。很多关于绑定和端点的问题让我们抓耳挠腮。。。我不确定我们是否已经完全掌握了。无论如何,过了一段时间,找到了一个有一半道理的代码示例,并将其完善:

Dim persons As Persons
Using host As New WebServiceHost(GetType(MyTestService), New Uri("http://MyServer:8443/TestService/"))
    host.AddServiceEndpoint(GetType(IMyTestService), New BasicHttpBinding(), "")
    host.Open()

    Using cf As New ChannelFactory(Of IMyTestService)(New BasicHttpBinding(), "http://MyServer:8443/TestService/")
        cf.Endpoint.Behaviors.Add(New WebHttpBehavior())
        Dim channel As IMyTestService = cf.CreateChannel()


        persons = channel.GetPersons
    End Using

    MsgBox(persons.Count)

End Using
唯一的问题是它在线路
persons=channel.GetPersons
上失败,出现以下错误:

HTTP请求未经客户端身份验证方案授权 “匿名”。从服务器接收的身份验证标头为 “谈判,NTLM”

现在,当服务器非常乐意通过IE或Chrome向我提供数据时,我发现出现身份验证错误很奇怪

因此,我们尝试将
WebHttpBinding
更改为
BasicHttpBinding
,希望大于预期,因为我们不确定这些方法在表面下到底在做什么,但这会产生错误:

终点在'http://MyServer:8443/TestService/"没有 与None MessageVersion绑定。 “System.ServiceModel.Description.WebHttpBehavior”仅适用于 与WebHttpBinding或类似绑定一起使用


嗯。。。您正在显示的代码示例将是使用
basicHttpBinding
的WCF服务的服务器端,该绑定是SOAP绑定,与REST无关。。。这绝对不是WCF REST服务客户端的代码

假设您的WCF REST服务已启动并正在运行,您的客户端将非常简单,如下所示:

// create a new web request to query your service
WebRequest request = WebRequest.Create("http://MyServer:8443/TestService/");

// get the response
WebResponse response = request.GetResponse();

// examine some properties of the response
long length = response.ContentLength;
string contentType = response.ContentType;

// fetch the XML (or JSON) contents of the response
string content = new StreamReader(response.GetResponseStream()).ReadToEnd();

嗯。。。您正在显示的代码示例将是使用
basicHttpBinding
的WCF服务的服务器端,该绑定是SOAP绑定,与REST无关。。。这绝对不是WCF REST服务客户端的代码

假设您的WCF REST服务已启动并正在运行,您的客户端将非常简单,如下所示:

// create a new web request to query your service
WebRequest request = WebRequest.Create("http://MyServer:8443/TestService/");

// get the response
WebResponse response = request.GetResponse();

// examine some properties of the response
long length = response.ContentLength;
string contentType = response.ContentType;

// fetch the XML (or JSON) contents of the response
string content = new StreamReader(response.GetResponseStream()).ReadToEnd();

我现在已经启动并运行了。谢谢你抽出时间。您的10万多名代表用户是StackOverflow的奥运金牌得主。我仍然没有得到绑定和端点的东西,但也许我不需要。我确实得到了一个401未经授权的请求情况,但使用其他StackOverflow答案解决了这个问题。再次感谢。我现在已经把它安装好了。谢谢你抽出时间。您的10万多名代表用户是StackOverflow的奥运金牌得主。我仍然没有得到绑定和端点的东西,但也许我不需要。我确实得到了一个401未经授权的请求情况,但使用其他StackOverflow答案解决了这个问题。再次感谢。