2017-03-29 7 views
0

Visual Studio 2015でサービス参照を作成しました。通信は正常に機能しますが、app.configファイルをアプリケーションから解放する必要があります。私は独自のバインディングとエンドポイントを作成しようとしましたが、実際にはSystemNullReferenceを受け取ります。私のコードのWebServiceに接続中にSystemNullReferenceが発生する

サンプル:

var binding = CreateBinding(); 
    var endpoint = new EndpointAddress("http://ws.cdyne.com/emailverify/Emailvernotestemail.asmx"); 
    var Client = new Testowy.Emailver.EmailVerNoTestEmailSoapClient(binding, endpoint); 

private static BasicHttpBinding CreateBinding() 
     { 
      var binding = new BasicHttpBinding(); 
      binding.Name = "EmailVerNoTestEmailSoap"; 
      binding.CloseTimeout = TimeSpan.FromMinutes(1); 
      binding.OpenTimeout = TimeSpan.FromMinutes(1); 
      binding.ReceiveTimeout = TimeSpan.FromMinutes(10); 
      binding.SendTimeout = TimeSpan.FromMinutes(1); 
      binding.AllowCookies = false; 
      binding.BypassProxyOnLocal = false; 
      binding.HostNameComparisonMode = HostNameComparisonMode.StrongWildcard; 
      binding.MaxBufferSize = 65536; 
      binding.MaxBufferPoolSize = 524288; 
      binding.MessageEncoding = WSMessageEncoding.Text; 
      binding.TextEncoding = System.Text.Encoding.UTF8; 
      binding.TransferMode = TransferMode.Buffered; 
      binding.UseDefaultWebProxy = true; 

      binding.ReaderQuotas.MaxDepth = 32; 
      binding.ReaderQuotas.MaxStringContentLength = 8192; 
      binding.ReaderQuotas.MaxArrayLength = 16384; 
      binding.ReaderQuotas.MaxBytesPerRead = 4096; 
      binding.ReaderQuotas.MaxNameTableCharCount = 16384; 

      binding.Security.Mode = BasicHttpSecurityMode.None; 
      binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.None; 
      binding.Security.Transport.ProxyCredentialType = HttpProxyCredentialType.None; 
      binding.Security.Transport.Realm = ""; 
      binding.Security.Message.ClientCredentialType = BasicHttpMessageCredentialType.UserName; 
      binding.Security.Message.AlgorithmSuite = System.ServiceModel.Security.SecurityAlgorithmSuite.Default; 
      return binding; 
     } 

System.NullReferenceException:オブジェクト参照オブジェクトのインスタンス に設定されていません。

サーバースタックトレース: System.ServiceModel.Security.IssuanceTokenProviderBase 1.DoNegotiation(TimeSpan timeout) w System.ServiceModel.Security.SspiNegotiationTokenProvider.OnOpen(TimeSpan timeout) w System.ServiceModel.Security.WrapperSecurityCommunicationObject.OnOpen(TimeSpan timeout) w System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout) w System.ServiceModel.Security.CommunicationObjectSecurityTokenProvider.Open(TimeSpan timeout) w System.ServiceModel.Security.SymmetricSecurityProtocol.OnOpen(TimeSpan timeout) w System.ServiceModel.Security.WrapperSecurityCommunicationObject.OnOpen(TimeSpan timeout) w System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout) w System.ServiceModel.Channels.SecurityChannelFactory 1.ClientSecurityChannel 1.OnOpen(TimeSpan timeout) w System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout) w System.ServiceModel.Security.SecuritySessionSecurityTokenProvider.DoOperation(SecuritySessionOperation operation, EndpointAddress target, Uri via, SecurityToken currentToken, TimeSpan timeout) w System.ServiceModel.Security.SecuritySessionSecurityTokenProvider.GetTokenCore(TimeSpan timeout) w System.IdentityModel.Selectors.SecurityTokenProvider.GetToken(TimeSpan timeout) w System.ServiceModel.Security.SecuritySessionClientSettings 1.ClientSecuritySessionChannel.OnOpen(TimeSpanの タイムアウト)ワット System.ServiceModel.Channels.CommunicationObject.Open(TimeSpanの タイムアウト)ワット ワットSystem.ServiceModel.Channels.ServiceChannel.OnOpen(のTimeSpanタイムアウト) System.ServiceModel.Channels.ServiceChannel.CallOpenOnce.System.ServiceModel.Channels.ServiceChannel W System.ServiceModel.Channels.CommunicationObject.Open(のTimeSpan タイムアウト)W
。 ICallOnce.Call(ServiceChannelSystem.ServiceModel.Channels W System.ServiceModel.Channels.ServiceChannel.EnsureOpened(のTimeSpan タイムアウト)W System.ServiceModel.Channels.ServiceChannel.CallOnceManager.CallOnce(のTimeSpan タイムアウト、CallOnceManagerカスケード)W 10チャンネルのTimeSpanタイムアウト)。 ServiceChannel.Call システムwはSystem.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCallで、ProxyOperationRuntime動作)W(文字列 アクションは、ブール一方向は、ProxyOperationRuntime動作は、[]イン、 オブジェクト[]アウト、のTimeSpanタイムアウトオブジェクト) .ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage メッセージ)

System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(のMessageData & msgData、のInt32 W W System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessageが reqMsg、IMessageがretMsg):[0]で210

例外再スロー Cワット WebServices.Test.GetWebService()ワット WebServices.Testowy.Emailver.EmailVerNoTestEmailSoap.AdvancedVerifyEmail(文字列 電子メール、のInt32タイムアウト、文字列LicenseKey)ワットタイプ):\ Users \ユーザーmichal.warchulinskiソース\レポ\ \ Aplixcom_CommonComponents \ Aplixcom_CommonComponents \ WebServices \ ClientClasses.cs:wiersz 65 w App.Main()w C:¥Users¥michal.warchulinski¥Documents¥Visual Studio 2015 \ Projects \ Soap \ Soap \ Program.cs:wiers z 22

すみません。このexeptionを提供する手がかりは何ですか?

+0

デバッガをオンにして、どのビットが好きではないかを確認しましたか?どの行が例外を正確にスローしたのか見たことがありますか? –

+0

Webサービスメソッドを呼び出す前にClient.Open()を呼び出していますか? –

+0

@ChrisWattsこのメソッドを呼び出すコードは別の解決策です。例外がスローされているようです "var Client = new Testowy.Emailver.EmailVerNoTestEmailSoapClient(バインディング、エンドポイント);"しかし、プロジェクトが同じソリューションになっている瞬間を前に確認したように、すべてうまく動作します。 – warkocz

答えて

0

webserviceメソッドを呼び出す前に、クライアントでOpenメソッドを呼び出してみてください。場合によっては、オブジェクト初期化の問題を解決するのに役立ちます。

スタックトレースに基づいて、webserviceメソッドを呼び出したときに実際にクライアントを開こうとしたことがわかります。しかし明らかに、それはOpen方法と比較して異なる方法でチャンネルを開こうとしました。

オープンコールが時には必要とされないことがある理由を説明する知識がありません。

私も誰かがそれを説明できると嬉しいです。

関連する問題