11

WCFサービスとSilverlight5クライアントがあります。次のインターフェイスを定義しました。

[ServiceContract(Namespace = "Silverlight", CallbackContract = typeof(IDuplexClient))]
public interface IDuplexService
{
    [OperationContract]
    void Subscribe(string userId);

    [OperationContract]
    void Unsubscribe(string userId);
}

[ServiceContract]
public interface IDuplexClient
{
    [OperationContract(IsOneWay = true)]
    void PushNotification(string msg);
}

そしてこれは私のWeb.configファイルです:

<configuration>
  <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior name="">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="false" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
  </system.serviceModel>
</configuration>

サービスを実行しようとすると、次のようになります。

コンパイル中の例外のため、サービス'/ServerService.svc'をアクティブ化できません。例外メッセージは次のとおりです。コントラクトにはデュプレックスが必要ですが、バインディング'BasicHttpBinding'はそれをサポートしていないか、サポートするように適切に構成されていません。

Web.configにいくつかのプロパティを追加する必要があることはわかっていますが、どこを見ても(そして何を試しても)それを機能させることができませんでした。

私はWCFを初めて使用するので、その件についてご協力をお願いします。私のグーグルはすべて私をどこにも導きません、そしてここで同じ質問をした人々が得た答えは私のために働きません。

だから私は検索をあきらめて、ただ尋ねることにしました。

更新:このリンクを使用してインターフェイスを作成しました-http://msdn.microsoft.com/en-us/library/cc645027%28v=vs.95%29.aspx

4

1 に答える 1

19

それがWCFのweb.config構成の範囲である場合は、契約を定義するセクション:

<services>
  <service name="WebApplication1.Service1">
    <endpoint address="" binding="wsDualHttpBinding" contract="WebApplication1.IService1" />
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
  </service>
</services>

このセクションを指定している場合、他の考えられる原因は、契約名が完全に修飾されていないことです。コントラクトの名前だけでなく、完全な名前空間を含める必要があります。

System.ServiceModelの完全な構成は次のとおりです。

  <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior name="">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="false" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
    <services>
      <service name="WebApplication1.Service1">
        <endpoint address="" binding="wsHttpBinding" contract="WebApplication1.IService1" />
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
      </service>
    </services>
  </system.serviceModel>

この場合、アプリケーションの名前空間はWebApplication1であり、サービスのクラス名はService1(つまり、Service1.svc)であり、Service1が実装するインターフェイスはIService1です。

于 2013-01-08T23:51:10.240 に答える