Pregunta

Quería crear un camino de un solo método para el servicio wcf.Todo está bien, a menos que Quiero volver el mensaje de fallo - si los hubiere.

Estoy usando la fumec azul generador de código de wsdl y el contrato de archivos.

En la operación wsdl elemento sólo he 'Entrada' y 'Culpa' los elementos secundarios.Cuando ejecuto el servicio tengo la información que puede declarar mensaje de fallo en la comunicación unidireccional y ..una de las soluciones es establecer de una manera falsa ..lo que hice y lo bien que funciona ok.Si se produce un error me sale el mensaje.

Sin embargo, me pregunto si se me rompió el servicio web/wsdl reglas de creación de ...Porque a partir de wsdl del servicio de esquema generador crea para mí una vía de comunicación (a 'true') y otros en otros lenguajes de programación' generadores probablemente haría lo mismo ...

Por lo tanto, Es correcto lo que Hice?¿Cómo puedo cambiar el wsdl para que el generador puede crear el código de forma apropiada?

Si en teoría no puedo utilizar falla en una de las vías de comunicación, a continuación, necesito extra estructura en respuesta a la devolución de cualquier error?

Gracias!

¿Fue útil?

Solución

Es cierto que una manera de operaciones no puede devolver los fallos para los clientes.Si desea generar un void no de una manera servicio de operación en WCF, usted tendrá que agregar un elemento output vacío para que la operación en su contrato WSDL.

El .RED basados en WSDL de los analizadores (tales como FUMEC.azul y svcutil) va a generar una vía de servicio de operaciones para <wsdl:operation> los elementos que no tiene un correspondiente <wsdl:output> elemento.

Por ejemplo, esta operación WSDL es una manera:

<wsdl:definitions>
    <wsdl:portType>
        ... 
        <wsdl:operation name="Foo">
           <wsdl:input message="tns:FooRequest" />
        </wsdl:operation>
    </wsdl:portType>
</wsdl:definitions>

Por otro lado, la definición de una operación con un vacío <wsdl:output> el elemento i.e un tipo XSD que contiene un secuencia vacía) será asignado a un void no de una manera método en .NET, el cual puede contener opcionalmente un fallo de la declaración:

<wsdl:definitions>
    <wsdl:portType>
        ... 
        <wsdl:operation name="Foo">
           <wsdl:input message="tns:FooRequest" />
           <wsdl:output message="tns:FooResponse" />
           <wsdl:fault message="tns:FooFault" />
        </wsdl:operation>
    </wsdl:portType>
</wsdl:definitions>

donde el <tns:FooResponse> el tipo es simplemente definida como:

<xs:element name="FooResponse">
    <xs:complexType>
        <xs:sequence/>
    </xs:complexType>
</xs:element>

Otros consejos

En WCF, la operación de unidireccional significa que no tiene valores devueltos y el cliente no le importa el éxito o el fracaso de la invocación.

En WCF, también obtuvimos algunas otras operaciones que son naturalmente unidireccionales, como la operación de MSMQ a través de WCF, entonces las operaciones normalmente se establecen en unidireccional.

Por lo tanto, si desea devolver algo para indicar el estado de invocación, entonces una vía no es una opción correcta, puede usar la operación de WCF normal que no es de una sola vía.

Para una operación de ida, aquí hay un artículo para su referencia wcf one-way

Siento que hiciste lo correcto.Para cualquier tipo de cliente (C #, Java, C ++, PHP), simplemente necesitan WSDL para crear el proxy.Siento que también debería trabajar en otros idiomas.Mejor para usar Soapui (Cliente SOAP neutral) para probar su servicio.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top