1

我是 WCF Web 服务的新手,不太了解如何调试 Web 服务...

以下示例,我创建了一个具有如下界面的 Web 服务:

public interface IMyService
{
    [OperationContract]
    [WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.WrappedRequest)]
    List<MyClass> GetData(string param);
}

以及返回 MyClass 列表的实现。

部署后,我在 Fiddler 中调用了该服务,例如

http://localhost/MyService.svc/GetData?keyword=blabla

它返回:

HTTP/1.1 401 Unauthorized
Server: Microsoft-IIS/7.5
SPRequestGuid: blabla
WWW-Authenticate: blabla
X-Powered-By: ASP.NET
MicrosoftSharePointTeamServices: 14.0.0.6114
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: POST, GET, OPTIONS
Date: Mon, 12 Nov 2012 17:24:08 GMT
Content-Length: 0

如果我只是写在作曲家:

http://localhost/MyService.svc/GetData

如果没有参数,它会返回状态为 200 的空 json。

当我在 Chrome 中尝试第一个请求时,它连续向服务器要求我的用户名和密码,但输入它们并没有帮助我摆脱循环(要求用户名和密码)。

有没有人遇到过这样的问题?或者你能对调试有什么建议吗?

4

1 回答 1

0

WCF 服务通常不允许开箱即用的 GET 访问。要剽窃我自己的答案(此处:https ://stackoverflow.com/a/13229373/1014822 ),您需要在 web.config 中设置一个如下所示的配置部分:

<bindings>
  <webHttpBinding>
    <binding name="crossDomain" crossDomainScriptAccessEnabled="true" />
  </webHttpBinding>
</bindings>
<behaviors>
  <endpointBehavior>
    <behavior name="restBehavior">
      <webHttp />
    </behavior>
  </endpointBehavior>
  <serviceBehavior>         
     <behavior name="MyServiceBehavior">
        <serviceMetadata httpGetEnabled="true"  />
        <serviceDebug includeExceptionDetailInFaults="true"/>
     </behavior>
  </serviceBehavior>
</behaviors>
<services>
  <service name="..." behaviorConfiguration="MyServiceBehavior">
    <endpoint address="" binding="webHttpBinding" bindingConfiguration="crossDomain" 
              contract="..." behaviorConfigurations="restBehavior" /> 
  </service>
</services>

您可能不需要跨域元素,但您至少需要允许的端点行为<webHttp />和允许的服务行为<serviceMetadata httpGetEnabled="true" />。然后您就不能拥有无配置的服务 - 您需要该<service/>元素才能绑定这些行为。您将需要<service/>使用您的服务名称和合同的接口名称来完成该元素(例如IMyService

如果您只通过 GET 进行测试,因为它更容易做,但会在您的实际应用程序中使用 POST(或 http 以外的其他协议),那么您可以考虑使用 WCF 测试客户端进行调试,而不是浏览器和/或提琴手. 此处客户端的详细信息:http: //msdn.microsoft.com/en-us/library/bb552364.aspx

于 2012-11-12T17:58:17.910 回答