C # с использованием разных конечных точек для одного и того же WebService - PullRequest
0 голосов
/ 08 января 2019

У нас есть установка с разработкой и производственной средой. Поэтому, когда разработка и тестирование завершены, каждый сервер имеет одинаковые веб-сервисы. Это мой первый раз, но на Dev. Я написал WebService и клиент C #, используя функцию «Добавить ссылку на службу» в Visual Studio (2017). Итак, у меня есть файл app.config, подобный этому:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <system.serviceModel>
    <bindings>
      <basicHttpBinding>
        <binding name="BizTalkInterfaceServiceSoapBinding">
          <security mode="Transport">
            <transport clientCredentialType="Basic" proxyCredentialType="Basic" realm="" />
          </security>
        </binding>
      </basicHttpBinding>
    </bindings>
    <client>
      <endpoint address="https://xxx.xxx.xxx.xxx:xxxxx/and/so/on"
          binding="basicHttpBinding" bindingConfiguration="BizTalkInterfaceServiceSoapBinding"
          contract="ServiceReference.BizTalkInterface" name="BizTalkInterfacePort" />
    </client>
  </system.serviceModel>
</configuration>

И структура Connected Services-> ServiceReference с файлами .wsdl, configuration.svcinfo, configuration91.svcinfo и Reference.svcmap. Я не знаю, есть ли смысл показывать содержимое этих файлов?

Я инициализирую клиента следующим образом:

protected BizTalkInterfaceClient client;

protected ServiceBase()
{
    client = new BizTalkInterfaceClient("BizTalkInterfacePort");
    client.ClientCredentials.Windows.AllowedImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Impersonation;
    client.ClientCredentials.UserName.UserName = "xxx@xxxdomain";
    client.ClientCredentials.UserName.Password = "xxxxxx";
}

Во всяком случае - это все хорошо, и работает отлично.

Если вы еще не поняли :-), я хотел бы определить две другие именованные конечные точки, но я не уверен, как это сделать. Есть ли мастер, как это сделать, или мне нужно скопировать / пропустить конечную точку в файле app.config и конфигурации?

Любая помощь будет принята с благодарностью. Заранее большое спасибо.

Ответы [ 2 ]

0 голосов
/ 09 января 2019

Если ваша служба имеет несколько конечных точек службы, она должна быть равна

 <service name="Service.CalculatorService"  >
    <endpoint address="http://localhost:3721/calculator"  binding="basicHttpBinding"  bindingConfiguration="ECMSBindingConfig" contract="ServiceInterface.ICalculatorService"></endpoint>
     <endpoint address="http://localhost:4000/calculator"  binding="wsHttpBinding"   contract="ServiceInterface.ICalculatorService"></endpoint>
  </service>

И тогда вы можете добавить ссылку на сервис, используя адрес wsdl. После добавления ссылки в вашем клиенте должно быть две конечные точки с именем конечной точки, например

<endpoint address="http://localhost:3721/calculator" binding="basicHttpBinding"
  bindingConfiguration="BasicHttpBinding_ICalculatorService" contract="Calculator.ICalculatorService"
  name="BasicHttpBinding_ICalculatorService" />
<endpoint address="http://localhost:4000/calculator" binding="wsHttpBinding"
  bindingConfiguration="WSHttpBinding_ICalculatorService" contract="Calculator.ICalculatorService"
  name="WSHttpBinding_ICalculatorService">

Тогда в вашем клиенте вы можете инициализировать свой клиент, используя имя вашей конфигурации, как написал Popo.

0 голосов
/ 08 января 2019

Вы должны быть в состоянии скопировать и вставить эту конечную точку в ваш узел <client>:

 <endpoint address="https://xxx.xxx.xxx.xxx:xxxxx/and/so/on"
      binding="basicHttpBinding" bindingConfiguration="BizTalkInterfaceServiceSoapBinding"
      contract="ServiceReference.BizTalkInterface" name="BizTalkInterfacePort" />

и просто дайте ему другое имя.

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

client = new BizTalkInterfaceClient("BizTalkInterfacePort");

пример:

<endpoint address="https://xxx.xxx.xxx.xxx:xxxxx/and/so/on"
      binding="basicHttpBinding" bindingConfiguration="BizTalkInterfaceServiceSoapBinding"
      contract="ServiceReference.BizTalkInterface" name="BizTalkInterfacePortProd" />

client = new BizTalkInterfaceClient("BizTalkInterfacePortProd");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...