C# SOAP::Lite与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)

我有一个非常简单的c应用程序,它运行WCF服务,如下所示:

[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 ****