Silverlight: доступ к службе SSL WCF через нестандартный порт SSL - PullRequest
2 голосов
/ 31 июля 2009

Я сделал копию моего производственного веб-сайта в целях подготовки. Мое приложение 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?

Ответы [ 2 ]

4 голосов
/ 31 июля 2009

Вздох. Это не имело ничего общего с Silverlight: проблема заключалась в слишком строгой фильтрации адресов в конечной точке службы. Я добавил следующее в свой класс обслуживания, и все это работает:

[ServiceBehavior(AddressFilterMode = AddressFilterMode.Any)]

Я обнаружил это, создав клиент службы Windows для службы, которая вернула гораздо больше информации об ошибке. Мораль этой истории такова: не надейтесь, что Silverlight даст вам полную картину!

0 голосов
/ 31 июля 2009

Возможно, вам нужно запустить httpcfg , чтобы IIS прослушивал трафик SSL на порту 2443.

http://msdn.microsoft.com/en-us/library/ms733768.aspx

http://technet.microsoft.com/en-us/library/cc781601(WS.10).aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...