2010-10-01 100 views
1

我們的客戶在我們的網站上有一個Silverlight 4.0(ASP.Net 4.0)應用程序,供客戶驗證後使用。該程序加載正常,但無法與創建的WCF服務通話。內部一切都很好。防火牆後的銀色和WCF服務

Silverlight應用程序託管在IIS 7.5上,內部IP爲10.1.1.8,防火牆將現實應用程序重定向到內部IP地址。這部分工作正常。 WCF服務位於IP 10.1.1.10上,並且是具有不同IP地址的相同虛擬機。數據庫服務器也可以順利通過。

http://www.ntbuddy.com/images/stackoverflow/SilverlightWcf1.png

  • 內部用戶(10.1.15.1)可以利用網站就好
  • 外部用戶可以沒有任何問題訪問該網站,除了當他們嘗試Silverlight應用程序
  • 當程序被訪問,它在10.1.1.10調用Wcf程序。作爲內部用戶可以看到他們工作正常的Wcf。外部用戶不能。
  • 如果我從ASP.Net網頁調用相同的例程,網頁將返回結果沒有問題。

服務引用中的服務引用是「http://10.1.1.10/ServiceReference/Common.svc」,用於下面的例程。

下面是最簡單的例程,我向Wcf請求一個自動編號例程的數字。只對內部用戶(Silverlight的)

作品

private void BtnAutoNumberClick(object sender, RoutedEventArgs e) 
{ 
    AutoNumber("AUTO"); 
} 

private void AutoNumber(string autoNumber) 
{ 
    var objResult = new CommonClient(); 
    objResult.GetAutoNumberCompleted += new EventHandler<GetAutoNumberCompletedEventArgs>(LoadResultsAutoNumber); 
    objResult.GetAutoNumberAsync(autoNumber, 4, autoNumber); 
} 

void LoadResultsAutoNumber(object sender, GetAutoNumberCompletedEventArgs e) 
{ 
    txtOrderNumber.Text = string.Format("{0}", e.Result.AutoNumber); 
} 

什麼我需要在我的Silverlight應用程序改變,使其對外部用戶以及內部用戶的工作?我想避免讓Wcf服務暴露,但如果這是必需的。

+0

什麼意思是「不能說」?你有什麼異常? – 2010-10-01 17:28:13

+0

我同意Jace Rhea,如果你能提供更多的信息,它會有所幫助。但是,WCF和Silverlight之間的典型問題是缺少WCF服務器上IIS根目錄中的clientaccesspolicy.xml文件。請查看:http://msdn.microsoft.com/en-us/library/cc197955(VS.95).aspx或發佈更多信息(異常堆棧跟蹤)。 – Maate 2010-10-01 17:43:34

回答

1

以10開頭的IP地址是內部地址,您將無法從防火牆外部訪問此地址。

http://en.wikipedia.org/wiki/IP_address

如果你看一下表標有「IANA保留的私有IPv4網絡範圍」

你需要使用一個外部IP地址暴露你的服務。

1

好的,這總共花了六天的時間閱讀和學習它「點擊」。我想Silverlight會非常容易,這在很大程度上是因爲我多年來一直在寫ASP.Net/WinForm應用程序。很多時候,我們會看到一個問題,並期待和期待,對於我們的生活,我們無法得到解決方案,因爲我們將重點放在單個問題上,不要退後一步,看看整體情況。 「Shiraz Bhaiji」只回答了大約10個系列IP地址,僅供內部使用。我知道這一點,但它是把我的思想從混亂中釋放出來的神奇鑰匙。我把所有東西都放在白板上,然後放在路由表中,然後用明顯的解決方案把自己打在腦後(例如外部訪問者看不到我的內部10系列網絡)。

簡單地說,這就是我對我的第一個Silverlight應用程序的經驗教訓:

的Silverlight運行在客戶端,而不是服務器(例如ASP.Net)。我正在測試我所有的Silverlight,並對照已經運行了一年的ASP.Net應用程序。 Silverlight應用程序在服務器上運行,我不能爲我的生活弄清楚爲什麼我的WCF服務爲ASP.Net而不是Silverlight工作。當Silverlight應用程序被下載到客戶端時,只有在防火牆後面纔會看到WCF服務:(1)打開防火牆以允許其訪問;(2)將服務移動到Internet(確保包括必要的安全)。我敢肯定,即使是1和2的組合,也有更多的方法。

我選擇了選項#1將它移動到一個專用和可見的服務。我使它很容易獲得,並且在替代端口上提供服務中的安全性。防火牆重定向到我的內部網站,一切都很好。因此,如果您使用Silverlight,確保在內部測試時也可以從外部啓動和測試,如果您要在外部公開它也是如此。