вызов asmx со стороны сервера c #: элемент endpoint, соответствующий этому контракту, может быть найден в элементе client - PullRequest
20 голосов
/ 22 сентября 2011

Я написал asmx webSerivce на srv1.Я написал проект bll проекта asp.net (оригинальный текст: asp.net) на srv2.Оба размещены в одном веб-домене

Я хочу вызвать asmx из проекта bll asp.net (оригинальный текст: код asp.net (c #) позади).

1) Я добавил веб-ссылку, но не смог найти ни одного учебного пособия о том, как на самом деле вызвать указанную службу.

Я пытался:

private void GetTemplateComponentsData()
{
    var service = new ServiceReference.GetTemplateParamSoapClient();
    TemplateParamsKeyValue[] responsArray = service.GetTemplatesParamsPerId(id);

    foreach (var pair in responsArray)
    {
        TemplateComponentsData.Add(pair.Key, pair.Value);
    }
}

, но получитьследующая ошибка при выполнении первой строки: Не удалось найти элемент конечной точки по умолчанию, который ссылается на контракт 'ServiceReference.GetTemplateParamSoap' в разделе конфигурации клиента ServiceModel.Это может быть связано с тем, что для вашего приложения не найден файл конфигурации или из-за того, что в клиентском элементе не найден элемент конечной точки, соответствующий этому контракту.

Чего мне не хватает?

2) Я планирую перенести asp.net proj и asmx вместе из одного домена в другой.Можно ли как-то ссылаться на этот веб-сервис?

1 Ответ

39 голосов
/ 22 сентября 2011

ОК, позвольте мне попытаться перефразировать ваш сценарий, чтобы убедиться, что я правильно понял:

  1. У вас есть веб-служба ASMX, размещенная в каком-либо домене.
  2. У вас есть ASPПриложение .NET, размещенное в том же или другом домене (это на самом деле не имеет значения), из которого вы хотите использовать этот веб-сервис ASMX с помощью клиента WCF (svcutil).

Первый шагэто добавить ссылку на службу в приложение ASP.NET, указав на WSDL службы ASMX:

enter image description here

Это сделает 2 вещи:

  • Это добавит ServiceReference к вашему веб-приложению

enter image description here

  • Это изменит ваш web.config и включит конечные точки клиента:

    <client>
      <endpoint address="http://ws.cdyne.com/NotifyWS/phonenotify.asmx"
        binding="basicHttpBinding" bindingConfiguration="PhoneNotifySoap"
        contract="ServiceReference1.PhoneNotifySoap" name="PhoneNotifySoap" />
      <endpoint address="http://ws.cdyne.com/NotifyWS/phonenotify.asmx"
        binding="customBinding" bindingConfiguration="PhoneNotifySoap12"
        contract="ServiceReference1.PhoneNotifySoap" name="PhoneNotifySoap12" />
    </client>
    

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

using (var client = new ServiceReference1.PhoneNotifySoapClient("PhoneNotifySoap"))
{
    var result = client.GetVersion();
}

Теперь просто замените мой кодфрагменты с вашими реальными сервисными именами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...