2016-06-03 2 views
2

Код, который я написал, интегрируется с сторонним веб-сервисом. Проблема в том, что действия мыла для обслуживания различаются в тестовых и производственных средах, и хотя эти URI не важны, возвращается хост 400 - ошибка с неправильным запросом, если URI мыльного кода неправильный. Хост-сервис написан на Java. Мы используем прокси-сервер веб-службы C#.Изменение мыльного действия URI на основе среды

Reference.cs

/// <remarks/> 
     [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://1.1.1.1:9080/wss/Ping", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Bare)] 
     [return: System.Xml.Serialization.XmlElementAttribute("PingResp", Namespace="http://namespace/data")] 
     public PingResp Ping([System.Xml.Serialization.XmlElementAttribute("PingReq", Namespace="http://namespace/data")] PingReq PingReq) { 
      object[] results = this.Invoke("Ping", new object[] { 
         PingReq}); 
      return ((PingResp)(results[0])); 
     } 

Для производственной среды, SOAPAction является:

[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://2.2.2.2:9080/wss/Ping", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Bare)] 

Есть ли способ, чтобы сделать эту динамику, т.е. можно ли изменить мыльное действие URI на основе настройки конфигурации?

Я попытался расширить класс SoapDocumentMethodAttribute, но он запечатан.

ответ

2

Поскольку для этого требуется постоянная времени компиляции, мы должны установить это значение перед компиляцией, поэтому его использование на основе среды и использование чего-то типа ConfigurationManager невозможно.

Вы можете создать глобальный статический класс со свойствами const, которые заполняются препроцессорами #if и задают символы условной компиляции при сборке.

public static class GlobalConstants 
    { 
#if DEBUG 
     public const string Uri = "devUri"; 
#endif 
#if TEST 
     public const string Uri = "testUri"; 
#endif 
#if RELEASE 
     public const string Uri = "releaseUri"; 
#endif 

    } 

И вы можете использовать его как

[System.Web.Services.Protocols.SoapDocumentMethodAttribute(GlobalConstants.Uri, Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Bare)] 

Это усложняет при переходе к новым условиям, но это способ, чтобы получить что-то близкое к тому, что вы ищете.

Некоторые документы по определению символов компиляции при сборке: https://msdn.microsoft.com/en-us/library/0feaad6z.aspx