在客戶端我需要調用這個方法:爲什麼OperationContext.Current爲空?
<OperationContract()> <WebMethod()> _
Public Function NotifierSignIn(ByRef url As String, ByVal login As String, ByVal password As String, ByVal sessionGuid As String, ByVal customerGuid As String) As String
Dim ret = String.Empty
Return ret
End Function
我試圖把它叫爲:
//sessionGuid is empty
string url = string.Empty;
string result = ws.NotifierSignIn(ref url, txtLogin.Text, txtPassword.Password, sessionGuid, txtCustomerGuid.Text);
首先被執行的是在WCF服務(.NET 3.5)方法:
Public Sub New()
System.Net.ServicePointManager.ServerCertificateValidationCallback = _
New System.Net.Security.RemoteCertificateValidationCallback(AddressOf CertificateValidationCallBack)
_errMsgs = ErrorMessages.GetInstance()
_authHandlerId = SoapHeaderHelper(Of Integer).GetInputHeader("HandlerId")
End Sub
我得到錯誤的
public object GetInputHeader(string name)
{
return GetHeader(name, OperationContext.Current.IncomingMessageHeaders);
}
,因爲OperationContext.Current
爲空。
我的服務是WCF服務,因爲我用戶
<%@ServiceHost Language="VB" Service="MyWS.Service1" %>
有趣的是我沒有在小提琴手。
我該如何解決?
編輯 繼Marc的建議(謝謝馬克)我已經將字段的初始化移動到了propety。 但還是有問題。它進入到我的webmethod中,但在其中有下一個異常,因爲OperationContext.Current仍然爲空。 要明確: 在我的webmethod的第一行,我有: 昏暗的情況下= OperationContext.Current ,不幸的是它爲空:/
所以,必須有另一個因素。
這是我在客戶端的app.config:
<?xml version="1.0"?>
<configuration>
<configSections>
<sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<section name="MyITNotifier.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false"/>
</sectionGroup>
</configSections>
<connectionStrings />
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="Service1Soap" closeTimeout="00:01:00" openTimeout="00:01:00"
receiveTimeout="00:10:00" sendTimeout="00:01:00" allowCookies="false"
bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard"
maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536"
messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
useDefaultWebProxy="true">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384"
maxBytesPerRead="4096" maxNameTableCharCount="16384" />
<security mode="None">
<transport clientCredentialType="None" proxyCredentialType="None"
realm="" />
<message clientCredentialType="UserName" algorithmSuite="Default" />
</security>
</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint address="http://localhost:50002/MyIT.asmx" binding="basicHttpBinding"
bindingConfiguration="Service1Soap" contract="ServiceReference1.Service1Soap"
name="Service1Soap1" />
</client>
</system.serviceModel>
<userSettings>
<MyITNotifier.Properties.Settings>
<setting name="UseAnimation" serializeAs="String">
<value>False</value>
</setting>
<setting name="SoundFilePath" serializeAs="String">
<value/>
</setting>
<setting name="UseCustomSound" serializeAs="String">
<value>False</value>
</setting>
<setting name="PlaySound" serializeAs="String">
<value>False</value>
</setting>
<setting name="HandlerId" serializeAs="String">
<value>1</value>
</setting>
<setting name="SessionGuid" serializeAs="String">
<value/>
</setting>
<setting name="MyItUrl" serializeAs="String">
<value/>
</setting>
<setting name="Interval" serializeAs="String">
<value>2</value>
</setting>
<setting name="RememberUser" serializeAs="String">
<value>False</value>
</setting>
<setting name="CustomerGuid" serializeAs="String">
<value/>
</setting>
</MyITNotifier.Properties.Settings>
</userSettings>
<startup><supportedRuntime version="v2.0.50727"/></startup>
</configuration>
如果您刪除構造函數,將代碼移動到某個方法,並從'NotifierSignIn'調用該方法 - 您仍會收到此錯誤嗎?我認爲'OperationContext'在構造函數中不存在,請嘗試在方法中使用它。 – vorrtex
刪除我的答案(關於您的編輯) - 我很抱歉沒有成功,但這似乎是一個合理的嘗試。這是......好奇。 –
@Marc因爲你我學到了新東西,所以再次感謝:) – user278618