2010-11-18 4 views
13

Ich habe einen einfachen Webservice in Visual Studio ausgeführt. Wenn ich versuche, die Metadaten anzuzeigen, fehlen Informationen über die Operation. Daher generiert svcutil Client-Code ohne Methoden. Ist irgendetwas mit meinem Setup nicht in Ordnung?WCF Metadaten fehlende Operationen

<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> 

Schnittstelle:

[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); 
} 

Antwort:

[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; 
    } 
} 

Anfrage:

[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; 
    } 
} 

Dies sind die Metadaten, die ich erhalte:

<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> 

Wo ist meine Operation hin?

+0

Hat 'PublishNotificationResponse1' ein Attribut 'DataContract'? –

+0

Nein, aber es hat ein MessageContract-Attribut. Ich werde den Beitrag bearbeiten, um die Anfrage- und Antwortobjekte einzubeziehen. – haymansfield

Antwort

30

ausgearbeitet. Das Setzen von ReplyAction = "*" für einen OperationContract bedeutet, dass der WsdlExporter (der die Metadaten veröffentlicht) diese Operation ignoriert. Wenn Sie einen anderen Wert festlegen, wird dieser korrigiert.

Was mich daran stört ist, dass SVUCUTIL standardmäßig replyaction auf * setzt, was bedeutet, dass SVCUTIL standardmäßig Dienste erstellt, für die die Metadaten effektiv beschädigt sind.

+0

Große Arbeit bei der Suche nach diesem. Danke vielmals. Ich arbeite mit WCSF Blue Tool für die Client-Erstellung auch. – Lijo

+0

Ich bin gerade auch auf dieses Thema gestoßen ... es muss einen Grund geben, warum es einen Nachmittag für mich verschwendet hat. – Jammer

0

versuchen FCRPublish von der Adresse Ihres enpoint Entfernen ... Ihr mex Endpunkt ist und in Ordnung scheint, so dass ich glaube, es sollte

arbeiten sie
+0

Ich versuchte dies ohne Glück. – haymansfield

+0

Wenn ich mir Ihren Code näher ansehe, habe ich nie ein 'MessageBodyMemberAttribute' ohne' MessageHeaderAttribute' hinzugefügt, könnten Sie nur für den Fall eines hinzufügen? – sebagomez

Verwandte Themen