2010-11-18 6 views
13

私はVisual Studioで簡単なWebサービスを実行しています。メタデータを表示しようとすると操作に関する情報が失われてしまい、svcutilはメソッドなしでクライアントコードを生成します。セットアップに何か問題はありますか?WCFメタデータに操作がありません

<system.serviceModel> 
    <bindings> 
     <basicHttpBinding> 
      <binding name="FCRPublishSOAP" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536" messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" useDefaultWebProxy="true"> 
       <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384"/> 
       <security mode="None"> 
        <transport clientCredentialType="None" proxyCredentialType="None" realm=""/> 
        <message clientCredentialType="UserName" algorithmSuite="Default"/> 
       </security> 
      </binding> 
     </basicHttpBinding> 
    </bindings> 
    <services> 
     <service name="Test.Publish.FCRPublish" behaviorConfiguration="SimpleServiceBehavior"> 
      <endpoint address="FCRPublish" behaviorConfiguration="" binding="basicHttpBinding" bindingConfiguration="FCRPublishSOAP" contract="IFCRPublish"/> 
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" /> 
    </service> 
    </services> 
<behaviors> 
    <serviceBehaviors> 
    <behavior name="SimpleServiceBehavior"> 
     <serviceMetadata httpGetEnabled="True" policyVersion="Policy15" /> 
    </behavior> 
    </serviceBehaviors> 
</behaviors> 

インタフェース:

[System.ServiceModel.ServiceContractAttribute(Namespace="http://Test/Publish", ConfigurationName="IFCRPublish")] 
public interface IFCRPublish 
{ 

    // CODEGEN: Generating message contract since the operation PublishNotification is neither RPC nor document wrapped. 
    [System.ServiceModel.OperationContractAttribute(Action="http://Test/PublishNotification", ReplyAction="*")] 
    PublishNotificationResponse1 PublishNotification(PublishNotificationRequest1 request); 
} 

応答:

[System.Diagnostics.DebuggerStepThroughAttribute()] 
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")] 
[System.ServiceModel.MessageContractAttribute(IsWrapped=false)] 
public partial class PublishNotificationResponse1 
{ 

    [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://Test/PublishTypes", Order=0)] 
    public PublishNotificationResponse PublishNotificationResponse; 

    public PublishNotificationResponse1() 
    { 
    } 

    public PublishNotificationResponse1(PublishNotificationResponse PublishNotificationResponse) 
    { 
     this.PublishNotificationResponse = PublishNotificationResponse; 
    } 
} 

要求:

[System.Diagnostics.DebuggerStepThroughAttribute()] 
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "3.0.0.0")] 
[System.ServiceModel.MessageContractAttribute(IsWrapped=false)] 
public partial class PublishNotificationRequest1 
{ 

    [System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://Test/PublishTypes", Order=0)] 
    public PublishNotification PublishNotification; 

    public PublishNotificationRequest1() 
    { 
    } 

    public PublishNotificationRequest1(PublishNotification PublishNotification) 
    { 
     this.PublishNotification = PublishNotification; 
    } 
} 

これは私が受け取るメタデータです:

<wsdl:import namespace="http://Test/Publish" location="http://localhost:3992/FCRPublish.svc?wsdl=wsdl0"/> 
<wsdl:types/> 
<wsdl:binding name="BasicHttpBinding_IFCRPublish" type="i0:IFCRPublish"> 
    <soap:binding transport="http://schemas.xmlsoap.org/soap/http"/> 
</wsdl:binding> 
<wsdl:service name="FCRPublish"> 
    <wsdl:port name="BasicHttpBinding_IFCRPublish" binding="tns:BasicHttpBinding_IFCRPublish"> 
     <soap:address location="http://localhost:3992/FCRPublish.svc"/> 
    </wsdl:port> 
</wsdl:service> 

私の操作はどこに行っていますか?

+0

'PublishNotificationResponse1'には' DataContract'属性がありますか? –

+0

いいえ、それにはMessageContract属性があります。私は、要求と応答オブジェクトを含めるように投稿を編集します。 – haymansfield

答えて

30

はそれを働い動作するはずと信じて...あなたのenpointのアドレスからFCRPublishを削除してみてください。 OperationContractのReplyAction = "*"を設定すると、WsdlExporter(メタデータをパブリッシュする)はその操作を無視します。それ以外の値を設定すると、それが修正されます。

これは、svcutilがデフォルトでreplyactionを*に設定するということです。つまり、svcutilはデフォルトでメタデータが効果的に壊れているサービスを作成します。

+0

これを見つけるには素晴らしい仕事です。ありがとう、トン。私はWCSF Blueツールを使ってクライアントを作成しています。 – Lijo

+0

私はちょうどこれをまた見ました...理由は、これはちょうど私のために午後を無駄にした理由があります。 – Jammer

0

は、あなたのMEXエンドポイントがあると、OKと思われるので、私はそれが

+0

私は運が無ければこれを試しました。 – haymansfield

+0

あなたのコードをよく見て、 'MessageBodyMemberAttribute'を' MessageHeaderAttribute'なしで追加したことはありません。 – sebagomez

関連する問題