После большого разочарования мне удалось определить, что оба файла web.config (на клиенте и сервере, оба из которых являются веб-приложениями в данном случае), должны быть изменены следующие разделы:
Клиент:
<client>
<endpoint
address="http://mysite.com:port/services/someservice.svc"
binding="basicHttpBinding"
bindingConfiguration="BasicHttpBinding_ISomeService"
contract="MyServices.ISomeService"
name="BasicHttpBinding_ISomeService" />
</client>
</system.serviceModel>
Сервер
<system.serviceModel>
<serviceHostingEnvironment>
<baseAddressPrefixFilters>
<add prefix="http://mysite.com:port/services"/>
</baseAddressPrefixFilters>
</serviceHostingEnvironment>
<behaviors>
<serviceBehaviors>
<behavior name="MyServices.SomeServiceBehavior">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service behaviorConfiguration="MyServices.SomeServiceBehavior"
name="MyServices.SomeService">
<endpoint address="http://mysite.com:port/services/someservice.svc"
name="endpoint.SomeService"
binding="basicHttpBinding"
bindingConfiguration=""
contract="MyServices.ISomeService"/>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
</service>
</services>
</system.serviceModel>
Здесь следует отметить, что адрес хоста во всех трех соответствующих разделах (адрес конечной точки клиента, значение baseAddressPrefixFilter сервера и адрес конечной точки сервера) должен совпадать.
Я могу переключаться между серверами, изменяя их, если они совпадают. Я бы все же предпочел способ установить это в зависимости от того, на какой машине работает сервер, но на данный момент это работает.
Показы WCF
Что горячо: постоянный объект. Прокси-объект клиента (созданный при добавлении ссылки на службу) поддерживает постоянное подключение к службе на сервере. Экземпляр службы, на который ссылается прокси-клиент, поддерживает свое состояние между вызовами, что может упростить сигнатуры методов и делает объект прокси-клиента и сервис в целом гораздо более полезным для определенных приложений. Типы объектов параметров могут совместно использоваться клиентом и сервером, если они объявлены в общей библиотеке. Это означает, что вам не нужно создавать два очень похожих класса или класса-оболочки для передачи не примитивных структур данных туда и обратно.
Что не так: конфигурация - королевская боль, плохо документирована и слишком сложна. Заставить его работать в конфигурации тестовой / dev / staging / production среды, где службе необходимо знать о ее местонахождении, сложно. Я не уверен, что информирование службы о URL своего домена (а не, скажем, об относительном пути к тому, на чем она выполняется) имеет какое-то существенное преимущество, за исключением проблем безопасности.
Тем не менее, я продолжаю идти по пути WCF, так как его преимущества намного превосходят головные боли.