Пожалуйста, помогите ... Я схожу с ума .... У меня есть служба 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 (действие String, выходы Object [], результат IAsyncResult)
at System.ServiceModel.ClientBase 1.ChannelBase
1.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)
at System.ServiceModel.ClientBase`1.OnAsyncCallCompleted (результат IAsyncResult)}