在客户端我需要调用这个方法:为什么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