WCFはhttpアクセスアドレスの後ろにパラメータを持ってアクセスする方式を実現します。
4580 ワード
最近は移動支払い関連のプロジェクトをしていますが、アリペイ通知のフィードバックサービスを実現する必要があります。アリペイ通知のフィードバックはURLのパラメータ付き形式です。http://xxxx.com?x=y&a=b)サービスにアクセスするには、この時点でマッチングしたサービスを実現する必要があります。WCFサービスがもう一つありましたので、お支払いのアリペイ通知のコールバックサービスも既存のWCFサービスに統合したいです。これまで書いたのは全部URLの後にパラメータなしの訪問です。直接にパラメータを持って訪問してみたら、サービスに入ることができますが、配られたインターフェースが見つけられません。インターネットで多くの資料を探しました。ほとんどは大体の考えを提供しただけです。大量の資料を探して、手を動かしてテストしてやっと完成しました。以下は私の実現したものを貼ってほしいです。必要な人のために時間を減らして資料を探しに行きます。
1、まずインターフェースの定義:
UriTemplate
URLパラメータ付きアクセス(上に赤いコード部分が表示されている)を実現し、必要に応じて他の形に変更することもできます。はい、今はURLにパラメータを持ってWCFサービスにアクセスすることができましたが、もう一つの問題があります。それは正常な状況で私たちが伝達するパラメータがこんなに多くないかもしれません。あるいは、あるパラメータはデフォルトでは空です。この実現には伝達が必要ではないです。この時はどうすればいいですか?これは正常な開発過程ですでに類似しています。空のパラメータにnullを割り当てるだけでいいです。
2、インターフェースが実現されたら、サービスを実現するべきです。
[AspNetComptibility Requirements(Requirements=AspNetComptibility Requirements.Allowed)]でなければ、スクリプトに呼び出されません。
3、サービスとインターフェースはもう実現しました。以下はサービスの配置です。サービスの配置を直接に貼り付けます。
1、まずインターフェースの定義:
using System;
using System.Collections.Generic;
using System.Linq;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Text;
using System.Threading.Tasks;
namespace Contract
{
[ServiceContract]
public interface IServer
{
[OperationContract]
[WebInvoke(Method = "POST",
UriTemplate = "/notify?notify_id={notify_id}¬ify_name={notify_name}¬ify_content={notify_content}",
ResponseFormat = WebMessageFormat.Json,
BodyStyle = WebMessageBodyStyle.Bare)]
string Notify(string notify_id, string notify_name,string notify_content=null);
}
}
ここでは主に構成を通しています。UriTemplate
URLパラメータ付きアクセス(上に赤いコード部分が表示されている)を実現し、必要に応じて他の形に変更することもできます。はい、今はURLにパラメータを持ってWCFサービスにアクセスすることができましたが、もう一つの問題があります。それは正常な状況で私たちが伝達するパラメータがこんなに多くないかもしれません。あるいは、あるパラメータはデフォルトでは空です。この実現には伝達が必要ではないです。この時はどうすればいいですか?これは正常な開発過程ですでに類似しています。空のパラメータにnullを割り当てるだけでいいです。
2、インターフェースが実現されたら、サービスを実現するべきです。
using Contract;
using System;
using System.Collections.Generic;
using System.Collections.Specialized;
using System.Linq;
using System.ServiceModel;
using System.ServiceModel.Activation;
using System.ServiceModel.Channels;
using System.ServiceModel.Web;
using System.Text;
using System.Threading.Tasks;
using System.Web;
namespace Service
{
// : “ ” “ ” , “Service”。
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Multiple, InstanceContextMode = InstanceContextMode.PerSession)]
public class Server : IServer
{
public string Notify(string notify_id, string notify_name, string notify_content = null)
{
return "success";
}
}
}
サービスを実現するには必ず追加してください。[AspNetComptibility Requirements(Requirements=AspNetComptibility Requirements.Allowed)]でなければ、スクリプトに呼び出されません。
3、サービスとインターフェースはもう実現しました。以下はサービスの配置です。サービスの配置を直接に貼り付けます。
はこの中にもいくつかの重要なところがあります。これらは全部配置ファイルに赤色を表示しています。分かりません。詳しい資料を探しに行きます。ここで具体的な説明をしません。