Не может использовать сгенерированный GlassFish WSDL из .NET - PullRequest
0 голосов
/ 03 декабря 2010

Я пытаюсь добавить ссылку на веб-сервис в свое приложение C # в Visual Studio. Веб-сервис размещен на сервере Sun GlassFish. К сожалению, Visual Studio выдает следующее предупреждение при попытке добавить ссылку на службу:

Custom tool warning: The following Policy Assertions were not Imported:
  XPath://wsdl:definitions/wsdl:binding[@name='SecurityWebServicePortBinding']/wsdl:operation[@name='RegisterUser']
  Assertions:
    <wsat:ATAlwaysCapability xmlns:wsat='http://schemas.xmlsoap.org/ws/2004/10/wsat'>..</wsat:ATAlwaysCapability>

Очевидно, он не может понять утверждения политики в WSDL, опубликованном сервером GlassFish. Вот выдержка из WSDL:

<?xml version='1.0' encoding='UTF-8'?>
<definitions
    xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"
    xmlns:wsp="http://www.w3.org/ns/ws-policy" xmlns:wsp1_2="http://schemas.xmlsoap.org/ws/2004/09/policy"
    xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata"
    xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
    xmlns:tns="http://test/securityservice.wsdl"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns="http://schemas.xmlsoap.org/wsdl/"
    targetNamespace="http://test/securityservice.wsdl"
    name="SecurityService">

    <wsp:Policy xmlns:wsat="http://schemas.xmlsoap.org/ws/2004/10/wsat" wsu:Id="SecurityWebServicePortBinding_AuthenticateUser_WSAT_Policy">
        <wsat:ATAlwaysCapability />
        <wsat:ATAssertion xmlns:ns1="http://schemas.xmlsoap.org/ws/2002/12/policy" wsp:Optional="true" ns1:Optional="true" />
    </wsp:Policy>

    <wsp:Policy xmlns:wsat="http://schemas.xmlsoap.org/ws/2004/10/wsat" wsu:Id="SecurityWebServicePortBinding_RegisterUser_WSAT_Policy">
        <wsat:ATAlwaysCapability />
        <wsat:ATAssertion xmlns:ns2="http://schemas.xmlsoap.org/ws/2002/12/policy" wsp:Optional="true" ns2:Optional="true" />
    </wsp:Policy>

    ...

    <binding name="SecurityWebServicePortBinding" type="tns:SecurityWebService">
        <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document" />
        <operation name="RegisterUser">
            <wsp:PolicyReference URI="#SecurityWebServicePortBinding_RegisterUser_WSAT_Policy" />
            <soap:operation soapAction="RegisterUser" />
            <input>
                <wsp:PolicyReference URI="#SecurityWebServicePortBinding_RegisterUser_WSAT_Policy" />
                <soap:body use="literal" />
            </input>
            <output>
                <wsp:PolicyReference URI="#SecurityWebServicePortBinding_RegisterUser_WSAT_Policy" />
                <soap:body use="literal" />
            </output>
            <fault name="UsernameExistsException">
                <soap:fault name="UsernameExistsException" use="literal" />
            </fault>
        </operation>
    </binding>

    ...

</definitions>

Если я удаляю все элементы политики из WSDL, Visual Studio сможет без проблем использовать сервис (на самом деле раньше я писал WSDL вручную и никогда не помещал инструкции политики). Итак, мои вопросы:

  1. Почему GlassFish настаивает на добавлении политик? Есть ли способ их подавить?
  2. Почему Visual Studio не может использовать WSDL с политиками?

Ответы [ 2 ]

0 голосов
/ 03 декабря 2010

Хорошо, я понял, почему GlassFish добавляет политики ws-AT.Моя веб-служба генерируется с использованием EJB (см. Ниже):

@Stateless
@WebService
public class SecurityWebService {
    ...
}

Поскольку атрибут транзакции по умолчанию для метода EJB без сохранения состояния ТРЕБУЕТСЯ, GlassFish также делает метод веб-службы транзакционным (см. здесь для деталей).Не то поведение, которое я хочу, но так оно и есть!

0 голосов
/ 03 декабря 2010

ws-AT (атомарные транзакции), кажется, является частью спецификации SOAP, о которой WCF не знает.Здесь есть некоторая информация - http://schemas.xmlsoap.org/ws/2004/10/wsat/

Обновление: фактически WCF знает о спецификации ws-AT, но не поддерживает ее полностью (http://schemas.xmlsoap.org/ws/2004/10/wsat/). Я полагаю, это связано с тем, что в WCF есть альтернативы, использующие OleTransactions.

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