gpt4 book ai didi

c# - 将 C# 服务引用与代理一起使用

转载 作者:太空狗 更新时间:2023-10-29 22:22:53 26 4
gpt4 key购买 nike

我正在尝试在 C# 项目中使用 ServiceReference。该项目旨在测试连接。我有一位客户正在尝试将 C# 应用程序连接到我一位同事的一项 Web 服务。无法建立连接,他认为这是我们自己的错误。

我正在尝试编写一个简单的 C# 项目。故事讲够了……现在需要信息了。

  1. 客户使用代理服务器
  2. 出于测试原因,我尝试连接到此 Web 服务 http://www.w3schools.com/webservices/tempconvert.asmx
  3. 我使用 .Net Framework 4.0
  4. 我的项目编译成 Windows 窗体应用程序。

这里是我的方法的源代码:

    private void button2_Click(object sender, EventArgs e)
{
try
{
//Create Client
ServiceReference1.TempConvertSoapClient client = new ServiceReference1.TempConvertSoapClient(@"TempConvertSoap",@"http://www.w3schools.com/webservices/tempconvert.asmx");
if (client.ClientCredentials != null)
{
//Use Values which are typed in in the GUI
string user = tbUser.Text;
string password = tbPassword.Text;
string domain = tbDomain.Text;

//Check what information is used by the customer.
if (!string.IsNullOrEmpty(user) && !string.IsNullOrEmpty(password) && !string.IsNullOrEmpty(domain))
{
client.ClientCredentials.Windows.ClientCredential = new NetworkCredential(user, password, domain);
}
if (!string.IsNullOrEmpty(user) && !string.IsNullOrEmpty(password))
{
client.ClientCredentials.Windows.ClientCredential = new NetworkCredential(user, password);
}
}
//Oh nooo... no temperature typed in
if (string.IsNullOrEmpty(tbFahrenheit.Text))
{
//GOOD BYE
return;
}
//Use the webservice
string celsius = client.FahrenheitToCelsius(tbFahrenheit.Text); //<-- Simple Calculation
tbCelsius.Text = celsius;
}
catch(Exception ex)
{
//Something
MessageBox.Show(ex.ToString());
}

}

这是我的问题:我如何设置此服务引用或客户端的代理?没有用于此目的的属性或 setter 。我用 ClientCredentials 试过了

最佳答案

好吧,我自己找到了答案。希望它能对某人有所帮助 ;)。

这部分创建一个绑定(bind)。这可以稍后在网络服务中使用

    private void button2_Click(object sender, EventArgs e)
{
BasicHttpBinding binding = new BasicHttpBinding("TempConvertSoap");

if (!string.IsNullOrEmpty(tbProxy.Text))
{
binding.Security.Mode = BasicHttpSecurityMode.TransportCredentialOnly;
binding.Security.Transport.ProxyCredentialType = HttpProxyCredentialType.Basic;


string proxy = string.Format("http://{0}", tbProxy.Text);
if (!string.IsNullOrEmpty(tbPort.Text))
{
proxy = string.Format("{0}:{1}",proxy,tbPort.Text);
}

binding.UseDefaultWebProxy = false;
binding.ProxyAddress = new Uri(proxy);


}
EndpointAddress endpoint = new EndpointAddress(@"http://www.w3schools.com/webservices/tempconvert.asmx");

这里开始我设置绑定(bind)的旧部分。

            try
{
//Create Client
ServiceReference1.TempConvertSoapClient client = new ServiceReference1.TempConvertSoapClient(binding, endpoint);
if (client.ClientCredentials != null)
{
//Use Values which are typed in in the GUI
string user = tbUser.Text;
string password = tbPassword.Text;
string domain = tbDomain.Text;



client.ClientCredentials.UserName.UserName = user;
client.ClientCredentials.UserName.Password = password;
client.ClientCredentials.Windows.ClientCredential.Domain = domain;

//Check what information is used by the customer.
if (!string.IsNullOrEmpty(user) && !string.IsNullOrEmpty(password) && !string.IsNullOrEmpty(domain))
{
client.ClientCredentials.Windows.ClientCredential = new NetworkCredential(user, password, domain);
}
if (!string.IsNullOrEmpty(user) && !string.IsNullOrEmpty(password))
{
client.ClientCredentials.Windows.ClientCredential = new NetworkCredential(user, password);
}
}
//Oh nooo... no temperature typed in
if (string.IsNullOrEmpty(tbFahrenheit.Text))
{
//GOOD BYE
return;
}
//Use the webservice

//THIS ONE IS IMPORTANT
System.Net.ServicePointManager.Expect100Continue = false;
string celsius = client.FahrenheitToCelsius(tbFahrenheit.Text); //<-- Simple Calculation
tbCelsius.Text = celsius;
}
catch(Exception ex)
{
//Something
tbCelsius.Text = ex.Message;
MessageBox.Show(ex.ToString());
}

}

我使用 Squid 作为我的代理,并在代理之外使用了防火墙。成功配置后,我遇到了错误 (417) Expectation failed。在研究过程中,我发现了一行代码帮助我“解决”了这个问题

System.Net.ServicePointManager.Expect100Continue = false;

关于c# - 将 C# 服务引用与代理一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17945543/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com