Служба WCF с базовым HttpBinding и netTcpBinding;не может получить доступ к конечной точке HTTP - PullRequest
3 голосов
/ 10 декабря 2010

Я хочу сделать доступным один и тот же интерфейс с netTcpBinding и basicHttpBinding. Я также хочу сделать доступным wsdl для обеих конечных точек. Когда я получаю доступ к http://localhost:9876/TestService/, я получаю конечную точку mex, в которой есть информация о конце Tcp на http://localhost:9876/TestService/?wsdl, но адрес http://localhost:9876/TestService/ws не отвечает, и я не могу понять, почему У меня есть базовый адрес и относительный адрес. Может ли кто-нибудь протянуть мне руку, чтобы показать, чего не хватает? Сейчас я просто пытаюсь заставить работать сервис TestImplementation, и я не перепутал сервис MessaginImplementation.

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <system.serviceModel>
        <bindings>
            <basicHttpBinding>
                <binding name="SimpleBinding" />
            </basicHttpBinding>
            <netTcpBinding>
                <binding name="DefaultTCPBinding" transactionFlow="true" />
            </netTcpBinding>
        </bindings>
        <behaviors>
            <serviceBehaviors>
                <behavior name="MetadataBehavior">
                    <serviceMetadata httpGetEnabled="true" httpGetBinding="webHttpBinding"
                        httpGetBindingConfiguration="" />
                </behavior>
            </serviceBehaviors>
        </behaviors>
        <services>
            <service behaviorConfiguration="MetadataBehavior" name="CompanyX.AppServer.Implementation.TestImplementation">
                <endpoint address="" binding="netTcpBinding" bindingConfiguration="DefaultTCPBinding"
                    name="TestTCPEndpoint" contract="CompanyX.AppServer.Interfaces.ITest" />
                <endpoint address="mex" binding="mexHttpBinding" bindingConfiguration=""
                    name="TestMex" contract="IMetadataExchange" />
                <endpoint address="/ws" binding="basicHttpBinding" bindingConfiguration="SimpleBinding"
                    name="Test" contract="CompanyX.AppServer.Interfaces.ITest" />
                <host>
                    <baseAddresses>
                        <add baseAddress="net.tcp://localhost:9878/TestService" />
                        <add baseAddress="http://localhost:9876/TestService/" />
                    </baseAddresses>
                </host>
            </service>
            <service behaviorConfiguration="MetadataBehavior" name="CompanyX.AppServer.Implementation.MessaginImplementation">
                <endpoint address="" binding="netTcpBinding" bindingConfiguration="DefaultTCPBinding"
                    name="MessagingTCPEndpoint" contract="CompanyX.AppServer.Interfaces.IMessaging" />
                <endpoint address="mex" binding="mexHttpBinding" bindingConfiguration=""
                    name="MessagingMex" contract="CompanyX.AppServer.Interfaces.IMessaging" />
                <host>
                    <baseAddresses>
                        <add baseAddress="net.tcp://localhost:9878/MessagingService" />
                        <add baseAddress="http://localhost:9876/MessagingService" />
                    </baseAddresses>
                </host>
            </service>
        </services>
    </system.serviceModel>
</configuration>

Ответы [ 2 ]

1 голос
/ 11 декабря 2010

Это ошибка новичка с моей стороны.Это на самом деле правильно.Ответ в пост ниже .Я получаю ответ из браузера только при попадании в базовый класс HTTP, но с помощью этого wsdl я могу соединиться с обеими привязками.

0 голосов
/ 10 декабря 2010

Я подозреваю, что адрес вашей конечной точки службы неверен:

<endpoint address="/ws" binding="basicHttpBinding" bindingConfiguration="SimpleBinding"
                name="Test" contract="CompanyX.AppServer.Interfaces.ITest" />

Поскольку это относительный адрес (добавленный к вашему базовому адресу), он должен быть просто ws - без косой черты вперед:

<endpoint name="Test" 
          address="ws" 
          binding="basicHttpBinding" bindingConfiguration="SimpleBinding"
          contract="CompanyX.AppServer.Interfaces.ITest" />

Попробуйте без косой черты!Должно работать так.

...