У меня есть приложение Silverlight, в котором есть некоторые службы WCF, которые он использует. Когда я запускаю приложение silverlight, все работает нормально. Другой человек может использовать его просто отлично, однако большинство пользователей получают ошибку.Ошибка WCF для некоторых пользователей
Ошибка при попытке сделать запрос на URI «xxxxx». Это может быть связано с попыткой доступа к службе в междоменном режиме без надлежащей политики междоменного домена или политики, которая не подходит для SOAP-сервисов. Возможно, вам придется связаться с владельцем службы, чтобы опубликовать файл политики междоменной политики и обеспечить его отправку HTTP-заголовков, связанных с SOAP. Эта ошибка также может быть вызвана использованием внутренних типов в прокси-сервера веб-службы без использования атрибута InternalsVisibleToAttribute. Подробнее см. внутреннее исключение ».
Я включил WCF трассировку и заметил несколько ошибок там, когда эти пользователи обращались мое Silverlight приложения:
1) Конфигурация контекста оценки не найден. 2) Приложение типа контента/мыло + xml; charset = utf-8 был отправлен службе, ожидающей text/xml; кодировка = UTF-8
Вот мои конфигурационные файлы:
сервер конфигурации для WCF:
<?xml version="1.0"?>
<configuration>
<system.diagnostics>
<sources>
<source name="System.ServiceModel"
switchValue="All"
propagateActivity="true">
<listeners>
<add name="traceListener"
type="System.Diagnostics.XmlWriterTraceListener"
initializeData= "c:\log\Traces.svclog" />
</listeners>
</source>
</sources>
</system.diagnostics>
<system.web>
<compilation debug="true" targetFramework="4.0" />
<authentication mode="Windows"/>
<identity impersonate="false"/>
<customErrors mode="Off" />
</system.web>
<appSettings>
</appSettings>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior>
<!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
<serviceMetadata httpGetEnabled="true"/>
<!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information -->
<serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
</system.serviceModel>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
</system.webServer>
</configuration>
Вот мой клиент Config в Silverlight:
<configuration>
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="BasicHttpBinding_ISLtoCRM" maxBufferSize="2147483647"
maxReceivedMessageSize="2147483647">
<security mode="None" />
</binding>
<binding name="BasicHttpBinding_ISLtoSQL" maxBufferSize="2147483647"
maxReceivedMessageSize="2147483647">
<security mode="None" />
</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint address="http://xxxx.svc" binding="basicHttpBinding"
bindingConfiguration="BasicHttpBinding_ISLtoCRM" contract="SLCRMSrvc.ISLtoCRM"
name="BasicHttpBinding_ISLtoCRM" />
<endpoint address="http://yyyy.svc" binding="basicHttpBinding"
bindingConfiguration="BasicHttpBinding_ISLtoSQL" contract="SLSQLSrvc.ISLtoSQL"
name="BasicHttpBinding_ISLtoSQL" />
</client>
</system.serviceModel>
</configuration>
Служба WCF является размещенный в IIS 6.1 на Windows Server 2008 R2. Пул приложений настроен для работы под определенным пользователем. Управляемый режим трубопровода классический, а анонимная аутентификация включена на сайте в IIS. Вся другая аутентификация отключена.
Любая помощь в определении этого? Не уверен, почему я и другое приложение могут получить доступ к приложению просто отлично, но большинство пользователей не могут. Это проблема безопасности или что-то не так с тем, как я создал службу WCF?
ОБНОВЛЕНО конфигурации сервера для WCF:
<?xml version="1.0"?>
<configuration>
<system.diagnostics>
<sources>
<source name="System.ServiceModel"
switchValue="All"
propagateActivity="true">
<listeners>
<add name="traceListener"
type="System.Diagnostics.XmlWriterTraceListener"
initializeData= "c:\log\Traces.svclog" />
</listeners>
</source>
</sources>
</system.diagnostics>
<system.web>
<compilation debug="true" targetFramework="4.0" />
<customErrors mode="Off" />
<authentication mode="Windows" />
</system.web>
<appSettings>
</appSettings>
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="MyBinding">
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Windows" proxyCredentialType="None" realm="" />
</security>
</binding>
</basicHttpBinding>
</bindings>
<services>
<service name="CRMWCF.SLtoCRM" behaviorConfiguration="CRMBehavior">
<endpoint address="" binding="basicHttpBinding" bindingConfiguration="MyBinding" contract="CRMWCF.ISLtoCRM" />
</service>
<service name="CRMWCF.SLtoSQL" behaviorConfiguration="CRMBehavior">
<endpoint address="" binding="basicHttpBinding" bindingConfiguration="MyBinding" contract="CRMWCF.ISLtoSQL" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="CRMBehavior">
<!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
<serviceMetadata httpGetEnabled="true"/>
<!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information -->
<serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
</system.serviceModel>
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*"/>
<add name="Access-Control-Allow-Method" value="GET,PUT,POST,DELETE,OPTIONS"/>
<add name="Access-Control-Allow-Headers" value="Content-Type"/>
</customHeaders>
</httpProtocol>
<modules runAllManagedModulesForAllRequests="true"/>
</system.webServer>
</configuration>
Update, я дурачился с настройками и в конечном счете переработан приложение бассейн. Теперь я не могу заставить приложение общаться с сервисом WCF. Я также попытался удалить анонимный доступ к службе WCF, но это дает мне возможность поместиться сейчас. Я разместил отдельное сообщение об этом. –