所以我正在编写一个新的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中缺少的句号)
我在这里缺少什么?
答案 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);