实现外部WSDL获取的接口

时间:2017-01-04 17:07:26

标签: c# web-services soap wsdl

(呃,这有希望有意义。我可能没有足够的知识来进行智能搜索......)

所以,这里的想法是我提供了一个WSDL文件,我成功地将其作为服务引用导入Visual Studio。我可以看到它生成的界面很好。

我在自己的项目中创建了一个Web服务。在IMyService中,我公开了我需要的方法,在MyService.cs中,我实现了IMyService和IWSDLInterface。

逻辑如下:

[ServiceContract(Namespace = Constants.Namespace)]
public interface IMyService
{
/// <summary>
/// A simple WebGet that runs a test.
/// </summary>
[WebGet(UriTemplate = "Test")]
[OperationContract]
void Test();

[OperationContract]
CustomObject1 IWSDLInterfaceMethod1(CustomObjectReturn1 firstOperation);

[OperationContract]
CustomObject2 IWSDLInterfaceMethod2(CustomObjectReturn2 secondOperation);

}

这是我公开的服务。这是我获得的外部接口:

[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
[System.ServiceModel.ServiceContractAttribute(Namespace="http://eventmanager.xmlns.oracle.com/", 
ConfigurationName="ImportedWSDL.InterfaceIWantToImplement")]
public interface InterfaceIWantToImplement{

    // Example for IWSDLInterfaceMethod1; there are more things to implement here.

    [System.ServiceModel.OperationContractAttribute(Action="IWSDLInterfaceMethod1", ReplyAction="*")]
    [System.ServiceModel.XmlSerializerFormatAttribute(SupportFaults=true)]
    ImportedWSDL.customObject1 IWSDLInterfaceMethod1(ImportedWSDL.customObjectReturn1 firstOperation);


}

在MyService.cs中实现该接口工作正常。问题是,当通过SOAP调用MyService时,我总是遇到以下异常:

The formatter threw an exception while trying to deserialize the message: 
There was an error while trying to deserialize parameter 
[customObjectReturn1.firstParameter]. //changed name to make sense with the above code 
The InnerException message was 'The constructor with parameters 
(SerializationInfo, StreamingContext) is not found in ISerializable 
type 'System.Delegate'.'.  Please see InnerException for more details.

如果我理解正确,则此消息指出对我的服务的SOAP调用失败,因为无法反序列化customObjectReturn1的第一个参数。但是,这对我来说没有多大意义 - 我可以浏览我的WSDL并且我看到所描述的所有对象;将WSDL导入SoapUI 确实识别预期的参数及其属性,因此它们显然存在。

Constructor not found during deserialization?这里有一些关于修复的信息,但由于我不直接控制这些类(它们依赖于ImportedWSDL的自动生成代码),所以它没有多大意义给我编辑自动生成的代码。

所以,

  • 这是实现外部WSDL接口的合法方式吗?
  • 如果是这样,我是否能够以不会强制我编辑自动生成代码的方式向MyService.cs添加序列化标签?

提前非常感谢你。

1 个答案:

答案 0 :(得分:0)

以上评论:

System.Delegate是一个抽象类,虽然它有Seri​​alizationAttribute,但是没有实现。您无法序列化/反序列化System.Delegate。派生类必须实现反序列化调用的特殊构造函数。在你的情况下,它似乎,它没有。这将是您尝试使用以修复的Web服务的开发人员。