2015-11-07 63 views
3

我有一個包含多個項目的大型MVC解決方案。我打算用WCF服務創建一個單獨的解決方案,並移動一些高度資源匱乏的項目。想法是,MVC應用程序將與WCF通信以滿足任何計算需求。如何將wcf服務添加到現有的類庫

問題是我不知道如何調用已有接口到服務的現有類和接口。我的班級/接口:

public interface IHelloWorld 
{ 
    string SayHello(string name); 
} 

public class HelloWorld : IHelloWorld 
{ 
    public string SayHello(string name) 
    { 
     return string.Format("Hello, {0}", name); 
    } 
} 

班上有100多種方法。並不是所有的人都會接觸到WCF,只有他們中的一些人。

現在我必須在新創建的WCF服務中調用此類。我不知道:

  • 我必須修改現有的類轉換爲svc.cs(服務)或我可以創建一個單獨的服務文件,並調用現有的方法呢?
  • 服務類還需要一個將在web.config(端點合同)中定義的接口。我是否必須創建一個單獨的接口,只需要公開的方法,或者我必須使用類庫中的現有接口?如果我使用類接口,那麼我必須在web.config中提及相同的內容。

我有點困惑什麼應該是最好的方式來做到這一點。我不想修改現有的類,但想添加一個新的服務,我可以從那裏連接和調用。新的svc.cs文件是:

[ServiceContract] 
public interface IHelloWorldService 
{ 
    [OperationContract] 
    string SayHello(string name); 
} 

public class HelloWorldService : IHelloWorldService 
{ 
    private IHelloWorld helloWorld = new HelloWorld(); 
    public string SayHello(string name) 
    { 
     return helloWorld.SayHello(name); 
    } 
} 

這個目前的設計似乎我重複現有的類/接口。不知道這是否是正確的方法。請幫忙。

回答

1

我是否修改了現有的類以轉換爲svc.cs(服務),或者我可以創建單獨的服務文件並在那裏調用現有的方法?

不,因爲你說並非所有的方法都需要暴露。

這個當前的設計似乎我重複現有的類/接口。不知道這是否是正確的方法。請幫忙。

是的,它是重複的,如果你像你在問題中顯示的代碼一樣。 你可以這樣編寫你的服務的代碼;

[ServiceContract] 
public interface IHelloWorldService 
{ 
    [OperationContract] 
    string SayHello(string name); 
} 

public class HelloWorldService : IHelloWorldService 
{ 
    private IHelloWorld helloWorld = new HelloWorld(); 

    public string SayHello(string name) 
    { 
     return helloWorld.SayHello(name); 
    } 
} 

通過使用您的服務合同IHelloWorld,你是不是複製的邏輯,只需要方法將通過合同的HelloWorldService被曝光。

+0

是的,這是我的錯誤。感謝指出它,我也更新了我的帖子。無論如何,我想知道這是否是最好的方式。 – sarojanand

+0

另外我想知道我的類「HelloWorld」是否有15個屬性,是否需要在具有'[DataMember]'屬性的'HelloWorldService'類中添加所有這些屬性? – sarojanand

+0

@sarojanand - 是的,您需要包含DataMember屬性,否則該屬性將不可用於通過服務公開的類型。 –

相關問題