C# SOAP::Lite与WCF集成错误
我有一个非常简单的c应用程序,它运行WCF服务,如下所示:C# SOAP::Lite与WCF集成错误,c#,wcf,perl,soap,soaplite,C#,Wcf,Perl,Soap,Soaplite,我有一个非常简单的c应用程序,它运行WCF服务,如下所示: [ServiceContract] public interface IMessageRepository { event EventHandler<string> OnNewMessage; [OperationContract] void RegisterClient(); [OperationContract] void SendMessage(string message)
[ServiceContract]
public interface IMessageRepository
{
event EventHandler<string> OnNewMessage;
[OperationContract]
void RegisterClient();
[OperationContract]
void SendMessage(string message);
void ClearClients();
}
运行时,我收到以下错误消息:
action: 'IMessageRepository/http://tempuri.org/'
**** REQUEST ****
<?xml version="1.0" encoding="UTF-8"?><soap:Envelope soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:my="http://tempuri.org/" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><soap:Body><my:SendMessage><c-gensym3 xsi:type="xsd:string">A message from perl client</c-gensym3></my:SendMessage></soap:Body></soap:Envelope>
**** END REQUEST ****
**** RESPONSE ****
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN""http://www.w3.org/TR/html4/strict.dtd">
<HTML><HEAD><TITLE>Not Found</TITLE>
<META HTTP-EQUIV="Content-Type" Content="text/html; charset=us-ascii"></HEAD>
<BODY><h2>Not Found</h2>
<hr><p>HTTP Error 404. The requested resource is not found.</p>
</BODY></HTML>
**** END RESPONSE ****
我错过了什么?
perl应该调用SendMessagesome文本方法,这在c服务器中…我认为操作是错误的。尝试从on_操作处理程序中删除return$action。您是否可以控制服务器以便查看传入连接?错误消息说它正在尝试访问不存在的内容。也许这是一个简单的错误。查看完整的通信,包括服务器端或客户端的HTTP头。我想服务器更简单。它是404,所以一定是因为URL错误。这正是我想弄明白的。。。c语言中的演示客户端也可以很好地配合服务器配置。我想这是我在perl代码中犯的错误。它是否适用于来自Soap UI的手工定制请求?不同的方法。google for perl输出请求soap::lite给了我一个快速的消息,它说您需要使用soap::lite+trace=>[transport=>sub{print$\[0]->as_string};而不是使用SOAP::Lite;。
#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;
use SOAP::Lite +trace => [ transport => sub {
my ($in) = @_;
if ( ref($in) eq "HTTP::Request") {
print( "**** REQUEST ****\n" . $in->content() . "\n**** END REQUEST ****\n" );
}
elsif ( ref($in) eq "HTTP::Response") {
print( "**** RESPONSE ****\n" . $in->content() . "\n**** END RESPONSE ****\n" );
}
} ];
my $port = 8740;
my $server = "http://localhost:$port";
my $namespace = 'http://tempuri.org/';
# Setup Network Connection
my $service = SOAP::Lite
->ns( $namespace, 'my' )
->proxy( $server )
->on_action( sub {
my $action = sprintf( 'IMessageRepository/%s', @_ );
print( "action: '$action'\n" );
return $action;
} );
print( Dumper( $service ) );
eval {
print( "making request\n" );
my $response = $service->SendMessage("A message from perl client");
print( "got response:\n$response\n" );
};
if ( $@ ) {
print( "failed:\n**************************\n$@\n*****************************\n" );
}
action: 'IMessageRepository/http://tempuri.org/'
**** REQUEST ****
<?xml version="1.0" encoding="UTF-8"?><soap:Envelope soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:my="http://tempuri.org/" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><soap:Body><my:SendMessage><c-gensym3 xsi:type="xsd:string">A message from perl client</c-gensym3></my:SendMessage></soap:Body></soap:Envelope>
**** END REQUEST ****
**** RESPONSE ****
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN""http://www.w3.org/TR/html4/strict.dtd">
<HTML><HEAD><TITLE>Not Found</TITLE>
<META HTTP-EQUIV="Content-Type" Content="text/html; charset=us-ascii"></HEAD>
<BODY><h2>Not Found</h2>
<hr><p>HTTP Error 404. The requested resource is not found.</p>
</BODY></HTML>
**** END RESPONSE ****