【发布时间】:2011-07-26 09:17:54
【问题描述】:
请帮助...我快疯了...我有一个存在于几个不同服务器上的 wcf 服务。我需要根据其所在环境动态更改我的 silverlight 客户端上的端点地址。当我尝试通过代码或手动更新客户端配置文件更改地址时,我目前收到一个非常详细的 404 错误(讽刺)。
但是,当我右键单击服务引用并在我的客户端上配置服务时,我可以更改地址并且它可以工作。
我有以下服务。
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="DrawingServiceBasicHttp">
<readerQuotas maxStringContentLength="2147483647" />
</binding>
</basicHttpBinding>
</bindings>
<service behaviorConfiguration="md" name="My.DrawingService">
<endpoint address="Services"
binding="basicHttpBinding"
bindingConfiguration="DrawingServiceBasicHttp"
name="DrawingServiceEndPoint"
contract="MyServices.IDrawingService" />
<endpoint address="mex"
binding="mexHttpBinding"
bindingConfiguration=""
name="DrawingMex"
contract="IMetadataExchange" />
<behaviors>
<serviceBehaviors>
<behavior name="md">
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
我的客户端配置
<bindings>
<basicHttpBinding>
<binding name="DrawingServiceEndPoint" maxBufferSize="2147483647"
maxReceivedMessageSize="2147483647">
<security>
<transport>
<extendedProtectionPolicy policyEnforcement="Never" />
</transport>
</security>
</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint address="http://MyHostName/Services/DrawingService.svc/Services"
binding="basicHttpBinding" bindingConfiguration="DrawingServiceEndPoint"
contract="EvalDrawingService.IDrawingService" name="DrawingServiceEndPoint" />
</client>
在尝试设置地址的代码中:
EvalDrawingService.DrawingServiceClient client = new EvalDrawingService.DrawingServiceClient("DrawingServiceEndPoint", GetServiceAddress());
我已经验证了GetServiceAddress() 吐出的地址是否存在,并且我可以使用浏览器来验证它是否存在(更不用说我可以使用 wcftestclient 连接到它)。
例外:
{System.ServiceModel.CommunicationException:远程服务器返回错误:NotFound。 ---> System.Net.WebException:远程服务器返回错误:NotFound。 ---> System.Net.WebException:远程服务器返回错误:NotFound。 在 System.Net.Browser.BrowserHttpWebRequest.InternalEndGetResponse(IAsyncResult asyncResult) 在 System.Net.Browser.BrowserHttpWebRequest.c_DisplayClass5.b_4(对象 sendState) 在 System.Net.Browser.AsyncHelper.c_DisplayClass4.b_1(对象 sendState) --- 内部异常堆栈跟踪结束 --- 在 System.Net.Browser.AsyncHelper.BeginOnUI(SendOrPostCallback beginMethod,对象状态) 在 System.Net.Browser.BrowserHttpWebRequest.EndGetResponse(IAsyncResult asyncResult) 在 System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelAsyncRequest.CompleteGetResponse(IAsyncResult 结果) --- 内部异常堆栈跟踪结束 --- 在 System.ServiceModel.AsyncResult.End[TAsyncResult](IAsyncResult 结果) 在 System.ServiceModel.Channels.ServiceChannel.SendAsyncResult.End(SendAsyncResult 结果) 在 System.ServiceModel.Channels.ServiceChannel.EndCall(字符串操作,对象 [] 输出,IAsyncResult 结果) 在 System.ServiceModel.ClientBase
1.ChannelBase1.EndInvoke(String methodName, Object[] args, IAsyncResult 结果) 在 EvaluaionAncillaryControl.EvalDrawingService.DrawingServiceClient.DrawingServiceClientChannel.EndGetEvalAreaDrawing(IAsyncResult 结果) 在 EvaluaionAncillaryControl.EvalDrawingService.DrawingServiceClient.EvaluaionAncillaryControl.EvalDrawingService.IDrawingService.EndGetEvalAreaDrawing(IAsyncResult 结果) 在 EvaluaionAncillaryControl.EvalDrawingService.DrawingServiceClient.OnEndGetEvalAreaDrawing(IAsyncResult 结果) 在 System.ServiceModel.ClientBase`1.OnAsyncCallCompleted(IAsyncResult 结果)}
【问题讨论】:
-
在配置中更改端点地址时发生了什么?我相信这应该有效
-
@Richard - 查看我的编辑,谢谢。
-
两个建议 - 请发布确切的错误消息,您可能想使用 Fiddler 查看失败的请求。
-
@rboarman - Fiddler 只返回 404 响应。例外情况相同,但我会根据您的要求发布,谢谢。
-
请求是否发送到正确的服务器和端点?它是否使用正确的 IP 地址正确形成?仔细检查从 GetServiceAddress() 返回的地址是否在对服务器的请求中。另外,您在此之前是否看到任何失败的请求?也许对于 CrossDomain.xml 或 ClientAccessPolicy.xml?
标签: asp.net wcf silverlight-3.0