私はこれに数時間苦労しており、通信の問題の解決策を見つけることができません。 サービスがSOAPまたはプレーンXMLを介してクライアントと通信する必要がありますWCFサービス、SOAPまたはプレーンXMLのレスポンス、どのように?
私のサービスはWCFフレームワークに基づいて作成されますが、私のクライアントは作成されません。
サービスコードと設定をSOAPまたはXMLメッセージを返すように変更する方法を段階的に表示できますか?私は両方のソリューションに興味があります。
REST/SOAP endpoints for a WCF service Call WCF Using SOAP call
をしかし、この解決策のどれも私のために適切に働いた:
私はこの答えに、この基点を達成しようとしました。ブラウザで何も得られなかったり、リソースが見つかりませんでした。
私は新しいWCFサービスプロジェクトを開始しました。 http://localhost:3151/の下でそれを実行し、このようなコードを持っている:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;
namespace WcfService1
{
// NOTE: If you change the class name "Service1" here, you must also update the reference to "Service1" in Web.config and in the associated .svc file.
public class Service1 : IService1
{
public string GetData(int value)
{
return string.Format("You entered: {0}", value);
}
public CompositeType GetDataUsingDataContract(CompositeType composite)
{
if (composite.BoolValue)
{
composite.StringValue += "Suffix";
}
return composite;
}
}
}
は、おそらく2つのエンドポイントを作成する必要がI'will?両方ともバインディングパラメータとしてbasicHttpBinding
を含める必要があります。しかし、他に何がありますか?これよりもむしろ
<CompositeType BoolValue = 0 StringValue = "">
:
また、どのように(データ契約に基づいて)このようなXMLを生成する
<CompositeType>
<BoolValue>0</BoolValue>
<StringValue></StringValue>
</CompositeType>
私がする必要があることに注意してくださいを双方向通信ように私のサービスは、SOAPまたはXMLと応答をSOAPまたはXMLで受け取る必要があります。
また、可能であれば、私はASP .NETのようにサービスメソッドの説明をブラウザに表示したいと考えています。
お時間をいただきありがとうございます。
非常に大きなアップデートダウンここ
私はいくつかの解決策を見つけることを試みてきましたし、ここでは私がこれまでに収集されたものをすべてです。私は単純なXMLにのみ焦点を当ててきました。
プロトコルはこのようになっていることを言うことができます:クライアントから
メッセージ:
<MESSAGE MessageParam1 = 0>
<AdditionalInfo>Some message info </AdditionalInfo>
</MESSAGE>
応答:すべての
<RESPONSE ResponseParam1 = 0>
<AdditionalInfo>Some response info</AdditionalInfo>
</MESSAGE>
まず、私は現在の記述を見てみたいですサービスメソッドであり、送信/受信されるときの正確な形式でパラメータ化されます。
POST /Service1.asmx HTTP/1.1
Host: localhost
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "http://tempuri.org/ShowUser"
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ShowUser xmlns="http://tempuri.org/">
<MyLogin>
<User>string</User>
<Password>string</Password>
<Database>string</Database>
</MyLogin>
</ShowUser>
</soap:Body>
</soap:Envelope>
HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
Content-Length: length
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ShowUserResponse xmlns="http://tempuri.org/">
<ShowUserResult>string</ShowUserResult>
</ShowUserResponse>
</soap:Body>
</soap:Envelope>
そして、これは素晴らしいです:私は何を意味することは、私がこのような応答を持っている私は、私は私のブラウザでサービスを呼び出したASP .NET 2.0 Webサービスを実験したとき(単にサービスを開始しました)ということです。SOAPエンベロープ(基になるデータも同じですが)は別ですが、クライアントにその情報を表示して、「あなたはそのようなXML構造でHTTP POSTメソッドを実行しています。私はWCFと同様の結果を望んでいますが、SOAPを使用しない場合でも簡単です。これまで、Service1.svcをクリックすると、私は望んでいないWSDLコードをたくさん取得しています。私はこれがいくつかのケースでは素晴らしいことを知っていますが、私のクライアントを使っているプラットフォームがわかりません。また、.NETを使用していない場合は、WSDLを正しくインポートしない可能性があります。
私は何をしたいのか分かります。
これは、私は2つの長い日後に、これまでにやったことです...:
namespace RESTService
{
// NOTE: If you change the interface name "IService1" here, you must also update the reference to "IService1" in Web.config.
[ServiceContract]
[XmlSerializerFormat]
public interface IService
{
[OperationContract]
[WebGet]
Response EchoWithGet(string s);
[OperationContract]
[WebInvoke]
Response EchoWithPost(string s);
}
public class Response
{
[XmlAttribute]
public int ResponseParam1;
[XmlElement]
public string AdditionalInfo;
}
}
あなたは私がブラウザを介しメソッドに渡す方法がわからないので、私は、メッセージクラスを提供していませんでした見ての通り。私は文字列を渡す方法しか知りません。
そして、ここに実装し、configです:
namespace RESTService
{
// NOTE: If you change the class name "Service1" here, you must also update the reference to "Service1" in Web.config and in the associated .svc file.
public class Service1 : IService
{
public Response EchoWithGet(string s)
{
Response Transaction;
Transaction = new Response();
Transaction.AdditionalInfo = "I've responded: " + s;
return Transaction;
}
public Response EchoWithPost(string s)
{
Response Transaction;
Transaction = new Response();
Transaction.AdditionalInfo = "I've responded: " + s;
return Transaction;
}
}
}
設定は私のためにも、謎のビットです。私はそれがMSDNのトピックのいずれかで説明されているようにバインディングを作成しようとしました:http://msdn.microsoft.com/en-us/library/aa395208.aspx
しかし、メソッドを呼び出した後、私はSOAPのようなフォールト構造を返しましたが、SOAPエンベロープはありませんでした。とにかくここ
はconfigです:
<system.serviceModel>
<services>
<service name="RESTService.Service1">
<host>
</host>
<endpoint
address="rest" behaviorConfiguration="webBehavior"
bindingConfiguration="" binding="webHttpBinding"
contract="RESTService.IService"/>
</service>
</services>
<behaviors>
<endpointBehaviors>
<behavior name="webBehavior">
<webHttp />
</behavior>
</endpointBehaviors>
</behaviors>
</system.serviceModel>
私はこのように私のブラウザでのサービスメソッドを呼び出すとき:
:http://localhost:2443/Service1.svc/rest/EchoWithGet?s=test
私は私のブラウザでXMLファイルを得ました
<Response ResponseParam1="0">
<AdditionalInfo>I've responded: test</AdditionalInfo>
</Response>
私は正しい軌道にいるようですか?しかし、まだ私は、送信されたものと受信されたものについての完全な情報(ASP .NET 2.0のようなもの)を受け取る方法を知らない。 HTTP経由で何が起こっているのかを調べるために、スニッファを使ってサービスポートを監視しないでください。私はそれを見たいと思います。また、私はこれを見受け取ったXMLのソースファイルを見ると:
<?xml version="1.0" encoding="utf-8"?><Response ResponseParam1="0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" <br/>
xmlns:xsd="http://www.w3.org/2001/XMLSchema"><br/>
<AdditionalInfo>I've responded: test</AdditionalInfo></Response>
私はこれをカットする方法を、返されたXMLで、この追加情報を持ってしたくないですか?
もう一つの問題は、第二の方法である:
http://localhost:2443/Service1.svc/rest/EchoWithPost?s=test
予想通りこれは動作しません。私はエラーメッセージ "メソッドが許可されていません"を取得します。これを解決するには?
だから、この長い質問をまとめることができます。
私は正しい方法かもしれない、または間違った方法である、いくつかのハーフワーキングソリューションを持っています。
- XMLファイルをパラメータとして受け入れることをお勧めします。
- WebブラウザーでXMLをパラメーターとしてメソッドを呼び出す方法を教えてください。はい、.NETの別のクライアントにはしたくありません。ブラウザをクライアントにします。
- 返されたXMLで不必要な膨大な情報をどのようにカットするか教えてください。
- 私はSOAPを望んでいないことに気づいて、私のサービスの.NET 2.0のような記述を取得する方法を教えてください。
- EchoWithPostメソッドの何が問題なのか説明してください。なぜそれは動作しません?
私の例が悪い場合は、どのように達成すべきかの基本的な例を教えてください。
私は.NETとWCFを学んでいます。私は非常に混乱しています。これらの問題はすべて、正しいデータ交換プロトコルを設定することだけで...そして私は実際のサービスを書くためのstatredを持っていないこともあります。
お時間をいただき、今後のお手伝いをしていただき、ありがとうございます。
@wozdu:あなたは完全に正しいトラックにいる。そのスクリーンキャストをWCF RESTサービスで「Plain Old XML」で見ることができます。これにより、必要な要素と属性だけで完全にカスタマイズされたXMLを返すことができます。 –