2009-04-17 57 views
2

我有以下項目: 服務器,客戶端,遠程對象。客戶端做了一些事情,然後將遠程對象的代理傳遞給服務器。所有的東西都有效,直到服務器和客戶端在不同的域中。現在,當我試圖通過導致服務器我有一個例外使用不同的域時進行遠程處理的問題

「類型‘System.Runtime.Remoting.RemotingException’未處理的異常在mscorlib.dll發生

附加信息:這遠程代理服務器沒有通道接收器,這意味着服務器沒有正在監聽的註冊服務器通道,或者該應用程序沒有合適的客戶端通道與服務器通信。「

Internet上的一些消息說,我需要創建一些額外的渠道,但我不知道在哪裏,我該怎麼做,因爲我有服務器和客戶端上的頻道註冊。

Info: 
server - domain 2 
client - domain 1 
remote object - domain 1 

謝謝

+0

太謝謝你了。問題已經解決了。這只是壞的錯誤... – mimic 2009-04-18 01:23:02

+0

對不起。現在我沒有任何異常,但對象爲空... – mimic 2009-04-18 01:32:02

回答

0

聽起來像一個權限問題給我。你如何託管你的遠程對象?你如何通過域進行身份驗證? Here's a decent article關於您可能面臨的一些問題。

this article ...

缺省情況下,TCP客戶端信道本身與在其下的客戶端進程正在運行的用戶身份認證。您可以通過設置域,用戶名和密碼屬性來指定替代身份以指定替代身份

您是否在頻道屬性中指定了正確的憑證(包括域)?

+0

感謝您的鏈接,但恐怕這篇文章太大,因爲我需要儘快解決我的問題。也許你是對的,因爲事實證明,我有兩個不同領域的項目,其中一個很好,另一個不行。也許你知道一些線索或標誌來檢查發生了什麼? – mimic 2009-04-17 23:47:12

0

然後通過遠程對象 的代理服務器

你能解釋一下嗎?這聽起來不是一個好主意。通常使用代理來調用遠程方法(RPC)。將代理傳遞迴服務器是沒有意義的。確定它可能在某些情況下工作,但它只是增加了不必要的複雜性。

如果您想傳遞一個對象,請創建一個單獨的數據類並將其作爲參數傳遞給遠程方法。

Common.dll

[Serializable] 
public class Data 
{ 
    int a; 
    int b; 
} 
[Serializable] 
public class ResultData 
{ 
    int c; 
} 
public interface IServerInterface 
{ 
    ResultData DoSomething(Data data); 
} 

Server.dll

public class ServerObject : MarshalByRefObject, IServerInterface 
{ 
    public ResultData DoSomething(Data data) 
    { 
     // do some work on the server 
     return new ResultData(); 
    } 
} 

Client.exe

class Program 
{ 
    static void Main(string[] args) 
    { 
     IServerInterface proxy = CreateProxy(); 
     ResultData result = proxy.DoSomething(new Data()); 

    } 
} 
相關問題