Я сделал копию моего производственного веб-сайта в целях подготовки. Мое приложение Silverlight обслуживается через порт 81 и пытается получить доступ к службе WCF через SSL на порту 2443. Я подтвердил, что служба доступна, введя URL-адрес:
https://mydomain.com:2443/UtilService.svc
- я получаю страницу "Вы создали службу".
Но когда мое приложение SL пытается выполнить операцию над службой, я получаю знаменитое исключение "NotFound" в части End моего клиентского кода веб-службы:
{System.ServiceModel.CommunicationException: The remote server returned an error: NotFound. ---> System.Net.WebException: The remote server returned an error: NotFound. ---> System.Net.WebException: The remote server returned an error: NotFound.
at System.Net.Browser.BrowserHttpWebRequest.InternalEndGetResponse(IAsyncResult asyncResult)
at System.Net.Browser.BrowserHttpWebRequest.<>c__DisplayClass5.<EndGetResponse>b__4(Object sendState)
at System.Net.Browser.AsyncHelper.<>c__DisplayClass2.<BeginOnUI>b__0(Object sendState)
--- End of inner exception stack trace ---
at System.Net.Browser.AsyncHelper.BeginOnUI(SendOrPostCallback beginMethod, Object state)
at System.Net.Browser.BrowserHttpWebRequest.EndGetResponse(IAsyncResult asyncResult)
at System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelAsyncRequest.CompleteGetResponse(IAsyncResult result)
--- End of inner exception stack trace ---
at System.ServiceModel.AsyncResult.End[TAsyncResult](IAsyncResult result)
at System.ServiceModel.Channels.ServiceChannel.SendAsyncResult.End(SendAsyncResult result)
at System.ServiceModel.Channels.ServiceChannel.EndCall(String action, Object[] outs, IAsyncResult result)
at System.ServiceModel.ClientBase`1.ChannelBase`1.EndInvoke(String methodName, Object[] args, IAsyncResult result)
at UtilServiceClient.UtilServiceClientChannel.EndTryAutoLogon(IAsyncResult result)
at UtilServiceClient.UtilServiceReference.IUtilService.EndTryAutoLogon(IAsyncResult result)
at UtilServiceClient.OnEndTryAutoLogon(IAsyncResult result)
at System.ServiceModel.ClientBase`1.OnAsyncCallCompleted(IAsyncResult result)}
Я изменил clientaccesspolicy.xml следующим образом:
<access-policy>
<cross-domain-access>
<policy>
<allow-from http-request-headers="*">
<domain uri="http://*.mydomain.com:81"/>
<domain uri="https://*.mydomain.com:2443"/>
</allow-from>
<grant-to>
<resource path="/" include-subpaths="true"/>
</grant-to>
</policy>
</cross-domain-access>
</access-policy>
Другие примечания:
Производственная площадка обслуживает идентичный сервис на 443 без каких-либо проблем
Используя fiddler, я убедился, что CONNECT: 2443 появляется в нужное время.
Я отключил требование SSL в IIS и изменил конфигурацию WCF для удаления безопасности транспорта, а также изменил приложение SL для доступа к службе через порт 81 - и это работает.
Я использую IIS 6.
Есть ли какие-нибудь джиу-джу, которые мне нужны для доступа к услуге через порт 2443?