2009-06-05 70 views
1

我在VS 2008 Express中創建了我的第一個Silverlight項目,並試圖用它調用WCF Web服務。該Web服務非常簡單 - 我基本上只使用從VisualStudio使用WCF服務模板時創建的默認代碼,將所有內容重命名爲不是默認的「Service1」名稱,甚至刪除了複雜的返回類型,以便唯一的方法合約是一個返回字符串的方法。WCF - 最基本的WCF調用的NullReferenceException

在Silverlight方面,我從Silverlight模板創建了一個新項目,選擇該選項也創建了包含ASP.NET Web項目。我沒有改變網絡項目,Silverlight應用程序現在基本上只是一個按鈕和一個文本框。

我在調試器中啓動了我的WCF項目,並且可以在瀏覽器中加載.svc URL,並導航到WSDL。

使用svcutil.exe,我生成了一個基於此WSDL的c#代理類。我做了而不是使用/ async選項,所以我的代理類真的只有1個遠程方法調用,單個方法GetData(int value)返回一個字符串。

在我的Silverlight頁面代碼後面,我創建了一個新的服務實例,然後嘗試調用GetData()。

SliverServiceClient client = new SliverServiceClient(); 
client.GetData(1234); 

在我的Silverlight項目,我添加了以下端點/合同配置ServiceReferences.ClientConfig,我使用basicHttpBinding的,因爲

<configuration> 
    <system.serviceModel> 
    <bindings> 
     <basicHttpBinding> 
     <binding 
     name="basicHttpBinding_ISliverService" 
     closeTimeout="00:01:00" 
     openTimeout="00:01:00" 
     receiveTimeout="00:15:00" 
     sendTimeout="00:01:00" 
     maxBufferSize="65530" 
     maxReceivedMessageSize="65530" 
     textEncoding="utf-8"> 
     </binding> 
     </basicHttpBinding> 
    </bindings> 
    <client> 
     <endpoint 
     address="http://localhost:8181/SliverService.svc" 
     binding="basicHttpBinding" 
     bindingConfiguration="basicHttpBinding_ISliverService" 
     contract="ISliverService" 
     name="basicHttpBinding_ISliverService" /> 
    </client> 
    </system.serviceModel> 
</configuration> 

注意,據我所知,這是唯一的WCF綁定Silverlight支持。

我的問題是,在運行時,調用client.GetData(1234)給了我一個NullReferenceException。我已經在調試器中確認客戶端是而不是 null。如果我從調試器中檢查「客戶端」,我可以看到以下是而不是 null:ChannelFactory,Endpoint,State。屬性Channel和InnerChannel在調試器中給出錯誤「無法評估」。

我在代理類注意到的GetData(int值)僅僅是

base.Channel.GetData(value); 

調試器不會讓我步入代理類,看是否通道爲空 - 但似乎這就是只有可以,除非它來自ServiceModel庫。

沒有內部異常,和堆棧跟蹤如下:

at System.ServiceModel.Channels.Remoting.RealProxy.Invoke(Object[] args) 
at proxy_2.GetData(Int32) 
at SliverServiceClient.GetData(Int32 accountID) 
at Sliver.Page.MakeSliverCall(Object state) 
at Sliver.Page..ctor() 
at Sliver.App.Application_Startup(Object sender, StartupEventArgs e) 
at System.Windows.CoreInvokeHandler.InvokeEventHandler(Int32 typeIndex, Delegate handlerDelegate, Object sender, Object args) 
at MS.Internal.JoltHelper.FireEvent(IntPtr unmanagedObj, IntPtr unmanagedObjArgs, Int32 argsTypeIndex, String eventName) 

我做有在ASP.NET Web項目的web.config端點配置(雖然我沒有嘗試與,並得到相同的錯誤)。

我在這裏做錯了什麼?它似乎應該是非常簡單的。

回答

0

如果我理解的很好,你有一個承載WCF服務的ASP.NET項目(是IIS託管的還是in-proc?)。然後,您擁有一個應該使用該服務的Silverlight客戶端,並且在運行該客戶端時發生異常。是嗎?

您可以嘗試使用WcfTestClient測試您的服務嗎? (http://msdn.microsoft.com/en-us/library/bb552364.aspx)。測試這個,你可以說,如果它是服務或客戶端有錯誤(我會說這是客戶端,因爲它不是某種遠程異常)。