Visual Studio / SOAP - 'Добавляют Сервисная Ссылка' по сравнению с тем, 'Добавляют Ссылка веб-сервиса'

Я нашел, что могу импортировать сервис SOAP/WSDL, что я планирую на использовании в мое решение любого как "Ссылку веб-сервиса" (Система. Сеть. Сервисы) или как "Сервисная Ссылка" (Система. ServiceModel / WCF).

Я задавался вопросом если, каковы различия были. Я понимаю, что, 'Добавляют Сервисная Ссылка, '/WCF является более новым, там любые недостатки к использованию его по Системе. Сеть. Сервисы или это являются теперь предпочтительным способом использовать сервисы SOAP в .NET?

17
задан informatik01 24 August 2013 в 21:49
поделиться

3 ответа

На самом деле предпочтительным и наиболее полезным способом является использование Добавить ссылку на службу . Это добавит вашу службу в качестве прокси-сервера на стороне клиента WCF.

Добавить веб-ссылку - это способ работы веб-службы ASMX / ASP.NET в «старом стиле».

WCF - гораздо лучший выбор, чем ASMX, потому что:

  • он новее и будет поддерживаться в будущем (ASMX скоро исчезнет); если вы изучите его сейчас, вам не придется изучать его позже, когда ASMX окончательно исчезнет
  • он предлагает гораздо большую гибкость во всех аспектах
  • вы можете разместить только службу ASMX - это IIS, используя HTTP в качестве протокола ; WCF может размещаться в IIS; самостоятельно размещаться в службе Windows NT; WCF может использовать HTTP, NetTCP, MSMQ и многие другие протоколы
  • WCF предлагает гораздо больше безопасности и других настроек, что делает его гораздо более мощным в использовании

Да, WCF плохо разбирается в том, что его действительно трудно выучить - я на самом деле не считаю, что это правда. Ознакомьтесь с ресурсами для новичков - они действительно очень полезны!

21
ответ дан 30 November 2019 в 12:36
поделиться

Я думаю, что одно из отличий заключается в автоматически сгенерированном коде прокси для службы. Если вы выберете ссылку на службу, вашему приложению потребуется уровень WCF для взаимодействия. Обычно это не проблема, но если вы пишете код, который будет запускаться на других платформах (например, Mono), вы захотите вместо этого использовать ссылку на веб-службу (поскольку Mono еще не поддерживает WCF).

{ {1}}
3
ответ дан 30 November 2019 в 12:36
поделиться

похоже, что эта проблема может быть лучше подходит для материалов списка как сказал Трой (Хотя я предпочитаю поместить функцию непосредственно в фильтр)

filter(lambda filename: not filename.startswith("doc"),files)

или

[filename for filename in files if not filename.startswith("doc")]
-121--2755486-

Попробуйте добавить.. «/» в начале URI. Например:

../images/outbound-blue.png

.. «/» в начале URI подсказывает браузеру подниматься на один уровень в родительский каталог, а затем искать в каталоге images . В настоящее время набор поиск подкаталога с именем images в каталоге, содержащем таблицы стилей.

-121--2762242-

У меня есть приложение, которое вызывает существующую службу SOAP, написанную на J2EE языке и размещенную в WebSphere.

Я создал два консольных приложения - одно, ссылающееся на службу как на старую школьную веб-службу, и другое, ссылающееся на нее как на ссылку на службу.

В обоих случаях Visual Studio создает класс прокси и соответствующие записи конфигурации для службы.

В консольном приложении Service Reference я получаю гораздо больше параметров конфигурации, которые я не вижу в приложении Web Service app. В частности, Я могу установить максимальный размер сообщения и т.д.

На самом деле, для правильной работы консольного приложения Service Reference, Мне пришлось увеличить размер сообщения по умолчанию, чтобы вернуть все данные, отправленные в одном из вызовов метода.

Вот как выглядит конфигурация в приложении Service Reference:

<configuration>
    <system.serviceModel>
        <bindings>
            <basicHttpBinding>
                <binding name="ClaimSoapBinding" closeTimeout="00:01:00" openTimeout="00:01:00"
                    receiveTimeout="00:10:00" sendTimeout="00:01:00" allowCookies="false"
                    bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
                    maxBufferSize="65536000" maxBufferPoolSize="524288" maxReceivedMessageSize="65536000"
                    messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
                    useDefaultWebProxy="true">
                    <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
                        maxBytesPerRead="4096" maxNameTableCharCount="16384" />
                    <security mode="None">
                        <transport clientCredentialType="None" proxyCredentialType="None"
                            realm="" />
                        <message clientCredentialType="UserName" algorithmSuite="Default" />
                    </security>
                </binding>
            </basicHttpBinding>
        </bindings>
        <client>
            <endpoint address="http://urlgoeshere/ClaimService"
                binding="basicHttpBinding" bindingConfiguration="ClaimSoapBinding"
                contract="ClaimService.Claim" name="ClaimService" />
        </client>
    </system.serviceModel>
</configuration>

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

<configuration>
    <configSections>
        <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
            <section name="ServiceTesterOldSchool.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
        </sectionGroup>
    </configSections>
    <applicationSettings>
        <ServiceTesterOldSchool.Properties.Settings>
            <setting name="ServiceTesterOldSchool_ClaimService_ClaimService"
                serializeAs="String">
                <value>http://urlgoeshere/ClaimService</value>
            </setting>
        </ServiceTesterOldSchool.Properties.Settings>
    </applicationSettings>
</configuration>

Это намного проще, но не хватает многих опций, которые мы получаем с помощью ссылок на услуги.

Фактический код, вызывающий услугу, практически идентичен в обоих случаях.

Однако, чтобы ответить на ваш вопрос, я думаю, что важно придерживаться нынешнего способа действий. Microsoft делает это ясно, заставляя вас пройти через несколько уровней диалогов, прежде чем вы даже можете добавить старый школьный веб-справочник (по крайней мере, в VS2008).

Я думаю, что способ WCF более гибкий, и конфигурация намного более описательна относительно того, что происходит.

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

6
ответ дан 30 November 2019 в 12:36
поделиться