我们正在按照以下指南设置 Restful WCF 服务:http:
//www.codeproject.com/Articles/255684/Create-and-Consume-RESTFul-Service-in-NET-Framewor
说明很好,我们已成功运行测试版本并在浏览器中显示 XML 结果(在我们的案例Person
记录中)。
我们遇到的一个问题是作者并没有让我们在浏览器中显示 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 或类似的绑定。