0

こんにちは現在、FW3.5でレガシーWCFサービスを利用しています。いくつかのSilverLigtアプリケーションを使用して、JSON形式をサポートするためにこのWCFサービスを拡張し、JavaScriptアプリケーション用に呼び出す必要があります。現在のサービスは次のようになります。

[ServiceContract(Namespace = "")]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class Alcatraz
{
    [OperationContract]
    [FaultContract(typeof(SomeError))]
    public SomeClass DoSomething(SomeClass data)
    {
    }
}

WCFサービスのJSON形式のサポートについて知っているので、メソッドにWebInvoke属性を追加する必要があります

[WebInvoke(Method = "GET",
           RequestFormat = WebMessageFormat.Json,
           ResponseFormat = WebMessageFormat.Json,
           UriTemplate = "players")]

SomeClassクラスに[DataContract]属性を追加します。しかし、これを追加した場合、すべてのアプリケーションが同じように機能するかどうかはわかりませんか?

<system.serviceModel>
  <extensions>
    <behaviorExtensions>
      <add name="silverlightFaults" type="myNS.WCF.SilverlightFaultBehavior, SilverlightFaultBehavior, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>
    </behaviorExtensions>
  </extensions>
  <bindings>
    <customBinding>
      <binding name="binaryHttpBinding" allowCookies="true" receiveTimeout="00:02:00" sendTimeout="00:02:00" openTimeout="00:02:00" closeTimeout="00:02:00">
        <binaryMessageEncoding/>
        <httpTransport maxReceivedMessageSize="655360" maxBufferSize="655360"/>
      </binding>
    </customBinding>
  </bindings>
  <behaviors>
    <endpointBehaviors>
      <behavior name="SilverlightFaultBehavior">
        <silverlightFaults/>
      </behavior>
    </endpointBehaviors>
    <serviceBehaviors>
      <behavior name="myNS.WCF.MyServiceBehavior">
        <serviceMetadata httpGetEnabled="true"/>
        <serviceDebug includeExceptionDetailInFaults="true"/>
      </behavior>
    </serviceBehaviors>
  </behaviors>
  <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
  <services>
    <service behaviorConfiguration="myNS.WCF.MyServiceBehavior" name="myNS.WCF.MyService">
      <endpoint address="" binding="customBinding" bindingConfiguration="binaryHttpBinding" contract="myNS.WCF.MyService" behaviorConfiguration="SilverlightFaultBehavior"/>
      <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
    </service>
  </services>
</system.serviceModel>

他のクライアントとの互換性を保つために何をする必要がありますか?

4

1 に答える 1

1

[WebGet] / [WebInvoke]属性を使用する場合は、エンドポイントwebHttpBindingの動作を使用する動作で、およびのエンドポイントを使用する必要があります。以下の構成<webHttp/>の編集を参照してください。

<system.serviceModel>
  <extensions>
    <behaviorExtensions>
      <add name="silverlightFaults" 
           type="myNS.WCF.SilverlightFaultBehavior, SilverlightFaultBehavior, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>
    </behaviorExtensions>
  </extensions>
  <bindings>
    <customBinding>
      <binding name="binaryHttpBinding" 
               allowCookies="true" 
               receiveTimeout="00:02:00" 
               sendTimeout="00:02:00" 
               openTimeout="00:02:00" 
               closeTimeout="00:02:00">
        <binaryMessageEncoding/>
        <httpTransport maxReceivedMessageSize="655360" maxBufferSize="655360"/>
      </binding>
    </customBinding>
  </bindings>
  <behaviors>
    <endpointBehaviors>
      <behavior name="SilverlightFaultBehavior">
        <silverlightFaults/>
      </behavior>
      <behavior name="Web">
        <webHttp/>
      </behavior>
    </endpointBehaviors>
    <serviceBehaviors>
      <behavior name="myNS.WCF.MyServiceBehavior">
        <serviceMetadata httpGetEnabled="true"/>
        <serviceDebug includeExceptionDetailInFaults="true"/>
      </behavior>
    </serviceBehaviors>
  </behaviors>
  <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
  <services>
    <service behaviorConfiguration="myNS.WCF.MyServiceBehavior" name="myNS.WCF.MyService">
      <endpoint address="" 
                binding="customBinding" 
                bindingConfiguration="binaryHttpBinding" 
                contract="myNS.WCF.MyService" 
                behaviorConfiguration="SilverlightFaultBehavior"/>
      <endpoint address="web" 
                binding="webHttpBinding" 
                contract="myNS.WCF.MyService" 
                behaviorConfiguration="Web"/>
      <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
    </service>
  </services>
</system.serviceModel>
于 2012-05-28T16:18:09.570 に答える