Is basicHttpBinding really required when exposing a WCF service as a Web Service for .NET 2.0 Target Client?

后端 未结 3 1757
栀梦
栀梦 2021-01-26 01:37

I have a WCF service and am hosting it in a Windows Service.

I tried to add a reference for the service from a Windows Form client built on .NET 2.0. I could get the Web

相关标签:
3条回答
  • 2021-01-26 01:52

    the problem is mexHttpBinding isn't actually exposing your service, its only exposing a defenition of your service, and since .net 2.0 doesn't understand nettcp you get an empty namespace, you need basicHttpBinding becuase that is your actually service endpoint.

    if you look at the contracts you see that the contract for mexHttpBinding isn't even "HBAcsNX.HBAccess" but rather "IMetadataExchange".

    0 讨论(0)
  • 2021-01-26 02:13

    Your config doesn't quite line up.....

    <service name="HBAcsNX.HBAccess"
             behaviorConfiguration="HBAcsNX.HBAccessBehavior" >
       <host>
           <baseAddresses>
                <add baseAddress="http://localhost:8002/HBAccess/" />
           </baseAddresses>
       </host>
    
       <endpoint address="mex" 
                 binding="mexHttpBinding" contract="IMetadataExchange" />
    </service>
    

    If you take all this into account, you get http://localhost:8002/HBAccess/ from the base address, plus mex from the MEX endpoint --> http://localhost:8002/HBAccess/mex

    But in your behavior configuration, you use a different address for MEX:

    <behavior name="HBAcsNX.HBAccessBehavior">
        <serviceMetadata httpGetEnabled="true"
                         httpGetUrl="http://localhost:8002/HBAccess/help/mex" />
    </behavior>
    

    Here, you point at http://localhost:8002/HBAccess/help/mex - note the extra /help in there. Now which one is it really??

    I would recommend tossing away the explicit httpGetUrl in the service behavior config - just use:

    <behavior name="HBAcsNX.HBAccessBehavior">
        <serviceMetadata httpGetEnabled="true" />
    </behavior>
    

    and you should be able to get your MEX at http://localhost:8002/HBAccess/mex.

    Marc

    0 讨论(0)
  • 2021-01-26 02:15

    You have to specify a binding, and basicHttpBinding is the only one that interoperates with a .NET 2.0 client. .NET 2.0 ASMX clients only support XML over HTTP, and with no WS-* protocols.

    0 讨论(0)
提交回复
热议问题