WCFはhttpアクセスアドレスの後ろにパラメータを持ってアクセスする方式を実現します。

4580 ワード

最近は移動支払い関連のプロジェクトをしていますが、アリペイ通知のフィードバックサービスを実現する必要があります。アリペイ通知のフィードバックはURLのパラメータ付き形式です。http://xxxx.com?x=y&a=b)サービスにアクセスするには、この時点でマッチングしたサービスを実現する必要があります。WCFサービスがもう一つありましたので、お支払いのアリペイ通知のコールバックサービスも既存のWCFサービスに統合したいです。これまで書いたのは全部URLの後にパラメータなしの訪問です。直接にパラメータを持って訪問してみたら、サービスに入ることができますが、配られたインターフェースが見つけられません。インターネットで多くの資料を探しました。ほとんどは大体の考えを提供しただけです。大量の資料を探して、手を動かしてテストしてやっと完成しました。以下は私の実現したものを貼ってほしいです。必要な人のために時間を減らして資料を探しに行きます。
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、サービスとインターフェースはもう実現しました。以下はサービスの配置です。サービスの配置を直接に貼り付けます。


  
    
      
        
      
    
    
      
        
          
        
      
      
        
          
          
          
        
      
    
    
      
        
      
      
    
    
    
    
      
        
          
            
          
        
        
      
    
  
はこの中にもいくつかの重要なところがあります。これらは全部配置ファイルに赤色を表示しています。分かりません。詳しい資料を探しに行きます。ここで具体的な説明をしません。