3

私はC#Webサービスを持っています:

namespace MyProject
{
  #region "Frontend"

  [WebService(Name="MyWebservice")]
  [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
  [System.ComponentModel.ToolboxItem(false)]
  public class MyWsClass : System.Web.Services.WebService
  {
     private static readonly IRegisterer reg = new SelfRegisterInDatabase();

     private MyWsClass() 
     {
       // tell who I am to a database
       MyWsClass.reg.SelfRegister();
     }

     // A service I expose to the users
     [WebMethod]
     public object MyMethod(object in)
     {
       // do some work
       return new Object();
     }
  }

  #endregion

  #region "Backend"

  public interface IRegisterer
  {
    public void SelfRegister();
  }

  // Herein lies my question:
  public class SelfRegisterInDatabase : IRegisterer
  {
    private static volatile bool IsRegistered = false;

    public void SelfRegister()
    {
      if(!IsRegistered)
      {
        // Expecting something like: "http://THEHOST:THEPORT/MyWebservice.aspx?WSDL"
        // In principle, the variable part is "THEHOST:THEPORT".
        string EndpointUrl = 
"HOW_DO_I_GET_WEBSERVICE_ENDPOINT_URL_HERE???"
        ;

        // 1) open a Database connection;
        // 2) insert new entry for this EndpointUrl string if doesn't exist;
        // 3) and close DB connection
        SelfRegisterInDatabase.IsRegistered = true;
      }
      return;
    }
  }
  #endregion
}

Web サービス自体のエンドポイントを動的に読み取って、データベースに登録できるようにする方法を知りたいです (たとえば、SQL Server - 実際のINSERTing は、ここで求めているものではありません)。どの方法/構成を使用すればよいですか?

4

2 に答える 2

2

これを試して、エンドポイント文字列全体を取得します。

WebOperationContext.Current.IncomingRequest.UriTemplateMatch.RequestUri.OriginalString

あなたは必要になるでしょう

using System.ServiceModel.Web;
于 2012-11-21T13:13:44.153 に答える