Настройка службы WCF с использованием wsHttpBinding - PullRequest
0 голосов
/ 27 апреля 2018

У меня проблемы с настройкой службы WCF с использованием wsHttpBinding и базового адреса Https.

Реальная проблема заключается в определении mex в клиентском тесте WCF:

Ошибка: невозможно получить метаданные из https://localhost:8722/Design_Time_Addresses/_20180420_WcfServiceLibraryTest/Service1/mex Если это служба Windows (R) Communication Foundation, к которой у вас есть доступ, убедитесь, что вы включили публикацию метаданных по указанному адресу.
Для получения справки о включении публикации метаданных, пожалуйста, обратитесь к документации MSDN по http://go.microsoft.com/fwlink/?LinkId=65455.

App.config:

<system.serviceModel>
    <behaviors>
        <serviceBehaviors>
            <behavior name="NewBehavior0"> <!-- Error: Cannot optain metadata -->
                <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
                <serviceDebug includeExceptionDetailInFaults="true" />
            </behavior>

            <behavior name="NewBehavior1"> <!-- Error: Cannot Find Cert -->
              <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
              <serviceDebug includeExceptionDetailInFaults="true" />
              <serviceCredentials>
                <serviceCertificate  findValue="BadThumbprint" x509FindType="FindByThumbprint"  storeLocation="LocalMachine" storeName="My"/>
              </serviceCredentials>
            </behavior>

            <behavior name="NewBehavior2"> <!-- Error: Cannot optain metadata -->
              <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
              <serviceDebug includeExceptionDetailInFaults="true" />
              <serviceCredentials>
                <serviceCertificate  findValue="GoodThumbprint" x509FindType="FindByThumbprint"  storeLocation="LocalMachine" storeName="My"/>
              </serviceCredentials>
            </behavior>             
        </serviceBehaviors>
    </behaviors>

    <bindings>
        <wsHttpBinding>
            <binding name="wsHTTPBindingConf">
                <security mode="Transport">
                    <!--<message clientCredentialType="None" />-->
                </security>
            </binding>
        </wsHttpBinding>
    </bindings>

    <services>
        <service behaviorConfiguration="NewBehavior0" name="_20180420_WcfServiceLibraryTest.Service1">
            <endpoint address="" binding="wsHttpBinding" bindingConfiguration="wsHTTPBindingConf"
          name="WCFEndpoint" contract="_20180420_WcfServiceLibraryTest.IService1">
                <identity>
                    <dns value="localhost" />
                </identity>
            </endpoint>
            <endpoint address="mex" binding="mexHttpsBinding" bindingConfiguration=""
          name="mexEndPoint" contract="IMetadataExchange" />
            <host>
                <baseAddresses>
                    <add baseAddress="https://localhost:8722/Design_Time_Addresses/_20180420_WcfServiceLibraryTest/Service1/" />
                </baseAddresses>
            </host>
        </service>
    </services>
</system.serviceModel>

Читая ТАК и пробуя все, что я нашел, я попробовал много настроек Но никто не показывает прогресс, о котором стоит упомянуть. И выглядеть больше как я понятия не имею. Какова правильная конфигурация для работы самого простого Ws (Compile + тестируемый в SoapUi) с wsHttpBinding?

Ответы [ 2 ]

0 голосов
/ 10 мая 2018

Мекс конечная точка неверна. Это причина проблемы. Следующая ссылка содержит полную информацию о том же.

https://docs.microsoft.com/en-us/dotnet/framework/wcf/feature-details/how-to-publish-metadata-for-a-service-using-a-configuration-file

0 голосов
/ 04 мая 2018

Я думаю, возможно, потому что mex bindingConfiguration="" установлен в пустую строку? Попробуйте удалить это или установить привязку.

Если значение по умолчанию mexHttpBinding не работает, попробуйте изменить его на wsHttpBinding. Вот пример Конечной точки пользовательских защищенных метаданных , которая может помочь. Там написано:

Во многих других примерах конечная точка метаданных использует значение по умолчанию mexHttpBinding, которое не является безопасным. Здесь метаданные защищены с помощью WSHttpBinding с защитой сообщений. Чтобы клиенты метаданных могли получать эти метаданные, они должны быть настроены с соответствующей привязкой.

Тестовый клиент WCF необходимо будет настроить для другой привязки, но я думаю, что он настроится автоматически.

<services>   
    <service name="Microsoft.ServiceModel.Samples.CalculatorService"  
             behaviorConfiguration="CalculatorServiceBehavior">  
     <!-- use base address provided by host -->  
     <endpoint address=""  
       binding="wsHttpBinding"  
       bindingConfiguration="Binding2"  
       contract="Microsoft.ServiceModel.Samples.ICalculator" />  
     <endpoint address="mex"  
       binding="wsHttpBinding"  
       bindingConfiguration="Binding1"  
       contract="IMetadataExchange" />  
     </service>  
 </services>  
 <bindings>  
   <wsHttpBinding>  
     <binding name="Binding1">  
       <security mode="Message">  
         <message clientCredentialType="Certificate" />  
       </security>  
     </binding>  
     <binding name="Binding2">  
       <reliableSession inactivityTimeout="00:01:00" enabled="true" />  
       <security mode="Message">  
         <message clientCredentialType="Certificate" />  
       </security>  
     </binding>  
   </wsHttpBinding>  
 </bindings>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...