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!";
    }
}

Web.config:

<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何も表示されません。フィドラーは、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 に答える