Неверный заголовок действия SOAP в запросе. Зачем?

Я пытаюсь подключиться к службе развертывания MS CRM из плагина CRM (т.е. у меня нет возможности использовать конфигурационный файл app.config).

Проблема заключается в том, что заменить "магия конфигурации" исходным кодом очень сложно.

Пока я использую следующий файл конфигурации (локально тестируемое в консольном приложении):

<client>
    <endpoint address="http://server/XRMDeployment/2011/Deployment.svc"
        binding="customBinding" bindingConfiguration="CustomBinding_IDeploymentService"
        contract="DeploymentService.IDeploymentService" name="CustomBinding_IDeploymentService">
        <identity>
            <userPrincipalName value="DOMAIN\DYNAMICS_CRM" />
        </identity>
    </endpoint>

    ...

</client>

Все в порядке, но когда я пытаюсь заменить конфигурацию кодом, я столкнулся со следующим. В результате сообщения SOAP вместо ожидаемого заголовка:

<a:Action s:mustUnderstand="1" u:Id="_4">http://schemas.microsoft.com/xrm/2011/Contracts/Services/IDeploymentService/Retrieve</a:Action>

Я вижу что-то странное:

<a:Action s:mustUnderstand="1" u:Id="_4">http://schemas.xmlsoap.org/ws/2005/02/trust/RST/SCT</a:Action>

Кто-нибудь знает, как я могу переопределить заголовок Action, и какой оператор в конфигурации превращает волшебство WCF, чтобы все работало?

Ответ 1

Я думаю, вы должны использовать что-то вроде следующей конфигурации

[ServiceContract(Name = "DeploymentService",
    Namespace = "http://schemas.microsoft.com/xrm/2011/Contracts/Services/")]
public interface IDeploymentService
{
    [OperationContract(Action="uri://<your service URI>/Retrieve")]
    void Retrieve();
}

Ответ 2

вы можете настроить действие с мылом в классе интерфейса службы,

    [ServiceContract]
    public interface IMyService
   {
     [OperationContract(
        Action = "MySoapAction" ]
      Message ServiceFunction(Message input);
   }