WCF服务无法从另一个类返回struct?

时间:2016-10-24 10:10:59

标签: c# vb.net wcf struct

所以我正在编写一个新的WCF服务,它应该在调用其中一个函数时返回一个Struct。结构保存在共享类中,因为它在程序的其他区域中使用。

结构看起来如下(注意,它在VB.Net类中,一些项目在C#中):

<DataContract()>
Public Structure WrapperResults
    <DataMember()>
    Dim Success As Boolean
    <DataMember()>
    Dim ErrorMessage As String
End Structure

现在在我设置的WCF服务中,我有一个简单的测试函数,如下所示:

public class TFXEmailProcessor : Wrapper
    {
        public MQShared.Functions.WrapperResults CallWrapper(string AppName, string Password, string ConfigXML)
        {
            MQShared.Functions.WrapperResults results = new MQShared.Functions.WrapperResults();

            results.ErrorMessage = "TFX Test";
            results.Success = true;

            return results;
        }
    }

在另一个类中,我添加了对WCF服务的引用,并尝试将其称为:

Dim myBinding As New BasicHttpBinding()
Dim endpointAddress As New EndpointAddress(WP.MyWrapper(x).WrapperURL)
Dim SR As New WrapperService.WrapperClient(myBinding, endpointAddress)

Dim WrapResults As MQShared.Functions.WrapperResults = SR.CallWrapper(AppName, Password, WP.MyWrapper(x).ConfigXML)

然而,Intellisense突出显示了SR.CallWrapper函数,我收到错误Value of type 'FunctionsWrapperResults' cannot be converted to 'Functions.WrapperResults'(注意FunctionsWrapperResults中缺少的句号)

我在这里缺少什么?

2 个答案:

答案 0 :(得分:0)

通过让编译器计算出返回值而不是特别声明它为

来解决这个问题
Dim WrapResults As MQShared.Functions.WrapperResults

我现在只需将函数调用声明为:

Dim WrapResults = SR.CallWrapper(AppName, Password, WP.MyWrapper(x).ConfigXML)

答案 1 :(得分:0)

有两种方法可以调用WCF服务。 代理频道

在代理服务器中,您可以使用添加服务引用... 将WCF服务添加到项目中。这样,代理类会自动生成。您无法使用共享课程。因为,共享类再次作为代理生成。

如果您可以使用共享课程,则必须选择频道方式。在通道中,将ServiceContact(接口)和DataContract添加到客户端项目中。

我使用C#

    var address = new EndpointAddress("..."); // Service address
    var binding = new BasicHttpBinding(); // Binding type

    var channel = ChannelFactory<IService>.CreateChannel(binding, address);

    MQShared.Functions.WrapperResults WrapResults = channel.CallWrapper(string AppName, string Password, string ConfigXML);