В моей компании работает несколько служб на разных компьютерах. Службы предоставляют конечную точку SOAP, к которой можно подключиться с помощью WCF.
Я могу получить экспортированную ссылку на сервис в виде cs-файла.
Классы там выглядят примерно так:
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
[System.ServiceModel.MessageContractAttribute(WrapperName="abc_cfg_keyResponse", WrapperNamespace="http://abc/xsd", IsWrapped=true)]
public partial class abc_cfg_keyResponse
{
[System.ServiceModel.MessageBodyMemberAttribute(Namespace="http://abc/xsd", Order=0)]
public System.Nullable<int> x_id;
}
Количество серверов зависит от того, как была запущена служба linux.
В зависимости от того, кто администрирует этот сервер и как они относятся к верхнему, нижнему регистру и общим именам, URI для пространства имен может быть "http://abc/xsd"," http://ABC/xsd" или на самом деле что-то еще.
На сервере запущено несколько служб, что означает, что "http://def/xsd" может принадлежать или не принадлежать одной и той же службе.
MessageBodyMemberAttribute
дает статическую информацию о типе времени компиляции.
Атрибут Namespace должен быть допустимым URI.
Моя проблема в том, что я могу создать свой сервис только для одного целевого сервера. То, что я хочу построить, должно быть совместимо со многими серверами.
Я попытался создать во время выполнения обмен Пространством имен в атрибуте украшения. Это позволило бы перебирать возможных кандидатов, пока не будет найдено совпадение. Это не сработало для меня, так как я не смог обновить атрибуты во время выполнения.
Я попытался изменить URI на универсальный URI и позволить серверу определить xsd. В принципе имена классов будут уникальными без пространства имен, что означает, что при динамическом сопоставлении будет гарантировано найти правильное пространство имен.
К сожалению, http://*/xsd" не является допустимым URI для этой технологии и создает исключение времени выполнения.
Я был бы очень рад, если бы мог сгенерировать выражение регулярного выражения для сервера, чтобы найти пространство имен. Для моего случая это \w*[aA][bB][cC]\w*
далеко уведет меня, но я думаю, что мне не повезет, учитывая, что подстановочный знак uri не поддерживается.
Разрешение точно abc
и ABC
будет охватывать что-то близкое к 100% случаев использования.
Могу ли я что-нибудь сделать с атрибутами декорации, чтобы позволить пространствам имен с разными именами быть действительными для одного и того же объекта?
Это чувствует себя связанным, но работает с типом документа, которого у меня нет.