2016-10-24 61 views
0

因此,我正在編寫一個新的WCF服務,當它調用其中一個函數時,它應該返回一個Struct。該結構被保存在共享類中,因爲它在程序的其他區域中使用。WCF服務無法從其他類返回結構?

的結構如下所示(請注意,這是一個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) 

然而,SR.CallWrapper函數被Intellisense突出顯示,並且我得到了錯誤Value of type 'FunctionsWrapperResults' cannot be converted to 'Functions.WrapperResults'(注意FunctionsWrapperResults中的缺失時段)

有沒有我在這裏丟失的東西?

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

試圖實現您的Datacontract以上StructLayout。 –

+0

@Nagu_R嘗試使用StructLayout.Auto但沒有解決問題。 –

+0

我相信,你會創建2套Wrapper結果類,並刪除其中的一個/重命名。如果引用的程序集具有相同的程序集標識,則刪除或替換其中一個文件引用,以便只有一個文件引用。 –

回答

0

只是讓編譯器工作了返回值,而不是明確聲明爲

Dim WrapResults As MQShared.Functions.WrapperResults 

我現在簡單地聲明函數調用的解決了這個問題調用WCF服務。 代理頻道

在Proxy中,您可以使用添加服務引用...通過這種方式,自動生成代理類。你不能使用你的共享類。因爲共享類再次作爲代理生成。

如果您可以使用共享類,則必須選擇通道方式。在通道中,將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);