1

我们正在按照以下指南设置 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 向我提供数据时,我发现出现身份验证错误很奇怪。

因此,我们尝试更改WebHttpBindingBasicHttpBinding充满希望而不是期望,因为我们不确定这些方法在表面下真正做了什么,但这会产生错误:

'http://MyServer:8443/TestService/' 的端点没有与 None MessageVersion 的绑定。'System.ServiceModel.Description.WebHttpBehavior' 仅适用于 WebHttpBinding 或类似的绑定。

4

1 回答 1

1

嗯...您展示的代码示例将是WCF 服务的服务器basicHttpBinding端,使用的是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();
于 2012-08-05T10:16:12.380 回答