我在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端點配置(雖然我沒有嘗試與,並得到相同的錯誤)。
我在這裏做錯了什麼?它似乎應該是非常簡單的。