2013-01-08 14 views
5

Tôi làm như sauLàm thế nào để truyền tham số cho một ServiceHost

//Define the service host 
     this._smeediPluginServiceHost = new ServiceHost(typeof(SmeediServiceHost), smeediServiceUri); 
     this._smeediPluginServiceHost.AddServiceEndpoint(typeof(ISmeediServiceHost), GetBinding(), smeediServiceUri); 
     SetupAndStartWebService(_smeediPluginServiceHost); 


    private void SetupAndStartWebService(ServiceHost serviceHost, ServiceDiscoveryBehavior serviceDiscoveryBehavior = null) 
    { 
     //Define service behaviours 
     ServiceMetadataBehavior serviceMetadataBehavior = new ServiceMetadataBehavior(); 
     serviceMetadataBehavior.HttpGetEnabled = true; 

     //Add the behaviours to the service 
     serviceHost.Description.Behaviors.Add(serviceMetadataBehavior); 

     if (serviceDiscoveryBehavior != null) 
      serviceHost.Description.Behaviors.Add(serviceDiscoveryBehavior); 

     serviceHost.Open(); 
    } 

tôi cần phải vượt qua một tham số vào Dịch Vụ và tôi không thể tìm ra cách. Tôi đã xem How do I pass values to the constructor on my wcf service? nhưng không thể có được đầu của tôi xung quanh nó. Cảm ơn

+0

Bạn có thể đọc từ tệp app.config bằng cách sử dụng ConfigurationManager.AppSettings [] bên trong dịch vụ thay vì chuyển đến hàm tạo không? – TylerOhlsen

Trả lời

17

Nếu tôi hiểu chính xác, bạn muốn chuyển các tham số cho hàm tạo của lớp triển khai dịch vụ của bạn. Bạn có thể làm điều này bằng cách passing an instance of the service class to the ServiceHost constructor, thay vì loại của nó. Đó là:

// Create the service instance 
var instance = new SmeediServiceHost("some parameters"); 

// Define the service host using the above instance 
this._smeediPluginServiceHost = new ServiceHost(instance, smeediServiceUri); 

Thận trọng - sử dụng phương pháp này có nghĩa là bạn đang sử dụng một ví dụ singleton của lớp dịch vụ. Nếu bạn cần một phiên bản mới cho mỗi phiên hoặc theo yêu cầu, hãy xem xét sử dụng ServiceHostFactory như được mô tả trong this answer.

+0

+1. Là một bổ sung, bài viết hữu ích: [WCF Service Instancing] (http://devproconnections.com/net-framework/wcf-service-instancing) – informatik01