我已经制作了一份我的制作网站的副本用于分期目的。我的Silverlight应用程序在端口81上提供,并尝试通过端口2443上的SSL访问WCF服务。我已通过键入URL验证了该服务是否可访问:
https://mydomain.com:2443/UtilService.svc
- 我收到了“您已创建服务”页面。
但是当我的SL应用程序尝试对服务执行操作时,我在Web服务客户端代码的End部分中得到了着名的“NotFound”异常:
{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会在合适的时间出现。
我关闭了IIS中的SSL要求并修改了WCF配置以删除传输安全性,并修改了SL应用以访问端口81上的服务 - 并且它可以正常工作。
我正在运行IIS 6.
我是否需要通过端口2443访问服务?
答案 0 :(得分:4)
叹息。它与Silverlight无关:问题是服务端点上的地址过滤过于严格。我将以下内容添加到我的服务类中,一切正常:
[ServiceBehavior(AddressFilterMode = AddressFilterMode.Any)]
我通过为服务创建Windows客户端来发现这一点,该客户端返回了有关错误的更多信息。这个故事的寓意是:不要依赖Silverlight来给你全部图片!
答案 1 :(得分:0)
可能需要运行 httpcfg 才能让IIS侦听端口2443上的SSL流量。
http://msdn.microsoft.com/en-us/library/ms733768.aspx
http://technet.microsoft.com/en-us/library/cc781601(WS.10).aspx