2

Если я попытаюсь добавить ссылку на службу в мое приложение с пустыми окнами, у меня есть два предупреждения/ошибки.Приложение для Windows 8 Store и WCF

TransportSecurityBindingElement

Услуга ФОС службы с файлом ServiceName.svc, я видел, что некоторые услуги остроумие ServiceName.asmx. Это причина? Нужен ли мне сервис с файлом * .asmx?

Я действительно смущен, потому что в Интернете есть слишком много вещей и ресурсов для этой темы. Также сбивает с толку то, что System.ServiceModel.Channels.TransportSecurityBindingElement не поддерживается, но я никогда не использовал это. Не в web.config или в коде в качестве конфигурации службы.

Вот моя конфигурация службы в web.config:

<system.web> 
    <compilation targetFramework="4.5" debug="true"/> 
    <httpRuntime/> 
    <pages controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID"/> 
</system.web> 
<system.serviceModel> 
<diagnostics> 
    <messageLogging logMalformedMessages="true" logMessagesAtServiceLevel="true" logMessagesAtTransportLevel="true"/> 
</diagnostics> 
<client/> 
<services> 
    <service behaviorConfiguration="basicHttpBehavior" name="e3kConnector.E3KConnectorService"> 
    <endpoint 
     address="mex" 
     binding="mexHttpBinding" 
     contract="IMetadataExchange" /> 
    <endpoint 
     address="" 
     binding="wsHttpBinding" 
     bindingConfiguration="wsHttpBinding" 
     name="wsHttpEndpoint" 
     bindingName="" 
     contract="Service.MyService" /> 
    <endpoint 
     address="Soap" 
     binding="basicHttpBinding" 
     bindingConfiguration="basicHttpBinding" 
     name="basicHttpBinding" 
     bindingName="" 
     contract="Service.MyService" /> 
    <host> 
     <baseAddresses> 
     <add baseAddress="http://localhost:50282/Service.svc" /> 
     </baseAddresses> 
    </host> 
    </service> 
</services> 
<bindings> 
    <basicHttpBinding> 
    <binding name="basicHttpBinding" allowCookies="true"> 
     <security mode="TransportWithMessageCredential"> 
     <transport clientCredentialType="Basic" proxyCredentialType="None" /> 
     <message clientCredentialType="UserName" /> 
     </security> 
    </binding> 
    </basicHttpBinding> 
    <wsHttpBinding> 
    <binding name="wsHttpBinding" allowCookies="true"> 
     <security mode="TransportWithMessageCredential"> 
     <transport clientCredentialType="Basic" /> 
     <message clientCredentialType="UserName" /> 
     </security> 
    </binding> 
    </wsHttpBinding> 
</bindings> 
<behaviors> 
    <serviceBehaviors> 
    <behavior name="basicHttpBehavior"> 
     <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/> 
     <serviceDebug includeExceptionDetailInFaults="true"/> 
     <serviceCredentials> 
     <userNameAuthentication userNamePasswordValidationMode="Custom" customUserNamePasswordValidatorType="e3kConnector.App_Data.Security.CustomUserNameValidator,e3kConnector"/> 
     <serviceCertificate findValue="tempCert" storeLocation="LocalMachine" storeName="My" x509FindType="FindBySubjectName"/> 
     </serviceCredentials> 
     <serviceAuthorization principalPermissionMode="Custom"> 
     <authorizationPolicies> 
      <add policyType="e3kConnector.App_Data.Security.AuthorizationPolicy, e3kConnector"/> 
     </authorizationPolicies> 
     </serviceAuthorization> 
    </behavior> 
    </serviceBehaviors> 
</behaviors> 
    <serviceHostingEnvironment aspNetCompatibilityEnabled="false" multipleSiteBindingsEnabled="false"/> 
</system.serviceModel> 
<system.webServer> 
    <modules runAllManagedModulesForAllRequests="true"/> 
    <!-- 
    To browse web app root directory during debugging, set the value below to true. 
    Set to false before deployment to avoid disclosing web app folder information. 
    --> 
    <directoryBrowse enabled="true"/> 
</system.webServer> 

В тесте я добавил эту tempConverter, но это работает. (Да, я знаю, что это файл asmx.) Я знаю также разницу между svc и asmx, но вот почему я запутался. Оба поддерживают SOAP, поэтому я до сих пор не понимаю, почему это не сработает. Может быть, это очень просто?

Если вам нужна дополнительная информация, пожалуйста, дайте мне знать.

+0

Забудьте о ASMX - это .net 1.1 и 2.0 услуги и не WCF. Ничего 3.0 и выше не следует использовать svc –

+0

Хорошо, спасибо. Я использую .net 4.5 теперь вопрос, как я могу заставить его работать: D – Patrick

+0

Так вы получаете проблему, когда пытаетесь добавить ссылку на службу? Отличается ли сервис? –

ответ

1

Это происходит потому, что клиентские приложения Windows Store поддерживают только small subset of WCF.

Попробуйте облегченные вниз конфигурации на службе (удалено связывающей wsHttp, поведение и связывание конфиги):

<system.serviceModel> 
    .... 
    <services> 
    <service name="e3kConnector.E3KConnectorService"> 
     <endpoint 
     address="mex" 
     binding="mexHttpBinding" 
     contract="IMetadataExchange" /> 
     <endpoint 
     address="" 
     binding="basicHttpBinding" 
     name="basicHttpBinding" 
     contract="Service.MyService" /> 
     <host> 
     <baseAddresses> 
      <add baseAddress="http://localhost:50282/Service.svc" /> 
     </baseAddresses> 
     </host> 
    </service> 
    </services> 
    .... 
</system.serviceModel> 
+0

Да, это работает. Благодарю. Итак, мне нужно создать вторую услугу для моих других клиентов, которые используют wsHttpBinding? – Patrick

+0

Ну, вы можете попробовать добавить конечную точку wsHttp, но дать ему классификатор адресов, например, «wshttp» или что-то еще, и это может сработать. Проблема, возможно, заключалась в том, что конечная точка wshttp была тем же URI, что и ваш базовый адрес, а базовая конечная точка называлась «мыло». Если вы отмените это приложение, ваше приложение метро может по-прежнему работать, а ваши другие пользователи могут перейти к wshttp. Это стоит попробовать, но может быть, что дополнительный материал в wsdl не позволит метропотребителю потреблять. –

+0

Хорошо, спасибо. Я попробую это в понедельник, когда вернусь в офис :) – Patrick

Смежные вопросы