WCF系列-获取400错误请求,但可以使用IE浏览到它



我已经编写了一个WCF服务,它正被Winforms应用程序调用。

我已经在本地测试了从WinForms应用程序调用WCF服务,它一切都很好

我已经将WinForms应用程序和WCF服务都移动到了远程服务器上,在远程服务器上我可以使用IE浏览到服务,但当我尝试使用WinForms应用程序时,我收到了400错误响应错误。

我的本地机器和远程服务器的配置完全相同,Windows防火墙、用户帐户等以及Service和Winforms应用程序的代码库/配置文件都相同。

WCF服务的配置文件如下(我不得不删除基地址)

<bindings>
<webHttpBinding>
<binding name="webBinding">
<security mode="None">
<transport clientCredentialType="None" />
</security>
</binding>
</webHttpBinding>
</bindings>
<services>
<service behaviorConfiguration="CodeLocksAPIServiceBehavior" name="CodeLocksAPI.WCF.CodeLocksAPIService">
<host>
<baseAddresses>
</baseAddresses>
</host>
<endpoint address="" behaviorConfiguration="webHttpBehavior" binding="webHttpBinding" bindingConfiguration="webBinding" contract="CodeLocksAPI.WCF.ICodeLocksAPIService" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="CodeLocksAPIServiceBehavior">
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
<endpointBehaviors>
<behavior name="webHttpBehavior">
<webHttp/>
</behavior>
</endpointBehaviors>
</behaviors>

在Winforms应用程序配置中,我尝试添加对没有帮助的DefaultProxy选项卡

WCF服务是使用以下从代码调用的

string serviceUserName = ConfigurationManager.AppSettings["ServiceUserName"];
string servicePassword = ConfigurationManager.AppSettings["ServicePassword"];
HttpClientHandler handler = new HttpClientHandler
{
Credentials = new
System.Net.NetworkCredential(serviceUserName, servicePassword)
};
this.Client = new HttpClient(handler);
this.Client.BaseAddress = new Uri(this.GetBaseAddressFromConfig());
processInitializeLockRequestArgs.AssetRef = assetRef;
string contentMessage = Newtonsoft.Json.JsonConvert.SerializeObject(processInitializeLockRequestArgs);
byte[] contentBytes = System.Text.Encoding.UTF8.GetBytes(contentMessage);
ByteArrayContent content = new ByteArrayContent(contentBytes);
content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/json");
httpResponse = this.Client.PostAsync(methodUri, content).Result;

如前所述-此代码在本地工作,但不在远程服务器上-WCF服务可以在本地和远程服务上浏览

我被告知,这个问题很可能是由于WinForms应用程序上的代理设置,而不是防火墙或类似的问题

您可以尝试添加

<configuration>
<system.net>
<defaultProxy useDefaultCredentials="true"/>
</system.net>
....

到WinForms配置文件的开头。

相关内容

最新更新