1

我已经创建了简单的 Web 服务。代码:

[ServiceContract]
public interface ITsdxService
{
    [OperationContract]
    void DoWork();

    [OperationContract]
    string Test();
}

public class TsdxService : ITsdxService
{
    public void DoWork()
    {
    }

    public string Test()
    {
        return "Hello World!";
    }
}

网络配置:

<system.serviceModel>
<services>
  <service name="Test.TSDX.UI.TsdxService">
    <endpoint 
        address="Tsdx"
        binding="wsHttpBinding"
        bindingConfiguration="TestBinding"
        contract="Test.TSDX.UI.ITsdxService" />
  </service>
</services>
<bindings>
  <wsHttpBinding>
    <binding name="TestBinding" />
  </wsHttpBinding>
</bindings>
<behaviors>
  <serviceBehaviors>
    <behavior name="">
      <serviceMetadata httpGetEnabled="true" />
      <serviceDebug includeExceptionDetailInFaults="false" />
    </behavior>
  </serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
</system.serviceModel>

当我从 Visual Studio 运行时,我输入 localhost:50517/TsdxService.svc?wsdl 一切正常 - 我可以看到 wsdl,但是当我输入 localhost:50517/TsdxService.svc/Tsdx/Test 或 localhost:50517/TsdxService.svc/ Tsdx/DoWork 我什么也没看到。Fiddler 告诉我我收到 400 错误。断点(在 Test 和 DoWork 方法上)不起作用。为什么?我做错了什么?

4

1 回答 1

2

WebGet属性添加到您的服务操作。

[WebGet]
public string Test() 
{
    ...
}

为此,您还需要将WebScriptEnablingBehavior添加到服务配置中。另外,使用webHttpBinding。这些都是让服务作为 AJAX 服务工作所必需的。

定义:

<endpointBehaviors>
    <behavior name="EndpointBehavior">
        <enableWebScript />
    </behavior>
</endpointBehaviors>

参考:

<endpoint behaviorConfiguration="EndpointBehavior"
    binding="webHttpBinding"
    ...
/> 
于 2012-06-20T08:24:24.033 回答