【发布时间】:2013-12-09 20:26:18
【问题描述】:
我正在尝试在 C# ASP.Net Web 应用程序中使用 Web 服务。该服务是用 PHP 构建的,并且位于某个不受我控制的远程服务器上,因此我无法对其进行修改以添加元数据或其他内容。
当我在 Visual Studio 2008 中使用“添加 Web 引用”选项时, 我收到以下错误:
HTML 文档不包含 Web 服务发现信息。
在尝试添加以下 Web 服务时。
https://subreg.forpsi.com/robot2/subreg_command.php?wsdl
Web 服务功能在 Visual Studio 2008 中公开和显示。但是我无法添加对它的引用以在 ASP.Net 应用程序中使用。
t3Service" 说明
方法 __构造( )
创建联系人()
get_contact ( )
get_domain_info ( )
get_last_error_code ( )
get_last_error_msg ( )
get_NSSET ( )
get_owner_mail ( )
登录 ( )
注册域()
register_domain_with_admin_contacts ( )
renew_domain ( )
request_sendmail ( )
send_auth_info ( )
transfer_domain ( )
-
我还尝试了 wsdl.exe 方法,方法是检索 xml 并将其复制到 wsdl 文件并生成代理类。但是 wsdl 输出包含警告,并且生成的代理类会跳过暴露的函数并生成如下内容:
// CODEGEN:来自命名空间“urn:t3”的操作绑定“create_contact”被忽略。 use=encoded 消息中的每个消息部分都必须指定一个类型。 // CODEGEN:来自命名空间“urn:t3”的操作绑定“get_contact”被忽略。 use=encoded 消息中的每个消息部分都必须指定一个类型。 // CODEGEN:来自命名空间 'urn:t3' 的操作绑定 'get_domain_info' 被忽略。 use=encoded 消息中的每个消息部分都必须指定一个类型。 // CODEGEN:来自命名空间 'urn:t3' 的操作绑定 'get_last_error_code' 被忽略。 use=encoded 消息中的每个消息部分都必须指定一个类型。 // CODEGEN:来自命名空间 'urn:t3' 的操作绑定 'get_last_error_msg' 被忽略。 use=encoded 消息中的每个消息部分都必须指定一个类型。 // CODEGEN:来自命名空间 'urn:t3' 的操作绑定 'get_NSSET' 被忽略。 use=encoded 消息中的每个消息部分都必须指定一个类型。 // CODEGEN:来自命名空间 'urn:t3' 的操作绑定 'get_owner_mail' 被忽略。 use=encoded 消息中的每个消息部分都必须指定一个类型。 // CODEGEN:来自命名空间 'urn:t3' 的操作绑定 'send_auth_info' 被忽略。 use=encoded 消息中的每个消息部分都必须指定一个类型。 // CODEGEN:来自命名空间 'urn:t3' 的操作绑定 'transfer_domain' 被忽略。 use=encoded 消息中的每个消息部分都必须指定一个类型。 // CODEGEN: 来自命名空间 'urn:t3' 的操作绑定 'request_sendmail' 被忽略。 use=encoded 消息中的每个消息部分都必须指定一个类型。 // CODEGEN:来自命名空间 'urn:t3' 的操作绑定 'login' 被忽略。 use=encoded 消息中的每个消息部分都必须指定一个类型。 // CODEGEN:来自命名空间 'urn:t3' 的操作绑定 'register_domain' 被忽略。 use=encoded 消息中的每个消息部分都必须指定一个类型。 // CODEGEN:来自命名空间 'urn:t3' 的操作绑定 'register_domain_with_admin_contacts' 被忽略。 use=encoded 消息中的每个消息部分都必须指定一个类型。 // CODEGEN:来自命名空间 'urn:t3' 的操作绑定 'renew_domain' 被忽略。 use=encoded 消息中的每个消息部分都必须指定一个类型。
编辑:
我为我的手工编码课程尝试了这段代码。
public String makeWebRequest(String methodName)
{
// Create the web request
HttpWebRequest request = WebRequest.Create("https://subreg.forpsi.com/robot2/subreg_command.php/") as HttpWebRequest;
// Add authentication to request
request.Credentials = new NetworkCredential("foo@mydomain.com", "bar");
request.Method = "POST";
request.ContentType = "text/xml";
request.Headers.Add("SOAPAction: https://subreg.forpsi.com/robot2/subreg_command.php/" + methodName);
// Get response
using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
{
// Get the response stream
StreamReader reader = new StreamReader(response.GetResponseStream());
// Console application output
//Console.WriteLine(reader.ReadToEnd());
return reader.ReadToEnd();
}
}
但是当我尝试得到响应时,它会返回
远程服务器返回错误:(500) Internal Server Error.
【问题讨论】:
标签: c# php web-services wsdl