2012-03-15 61 views
2
namespace WcfService1 
{ 
    // NOTE: You can use the "Rename" command on the "Refactor" menu to change the interface name "IService1" in both code and config file together. 
    [ServiceContract] 
    public interface HelloWorldService 
    { 
     [OperationContract] 
     [WebGet(UriTemplate = "")] 

     public string HelloWorld() //here 
     { 
      return "Hello world!"; 
     } 
    } 
} 

我得到這個錯誤:修飾語「公共」是無效的這個項目

Error 1 The modifier 'public' is not valid for this item 

這是我在我的svc.cs文件

public class Service1 : HelloWorldService 
{ 
    public string HelloWorld() 
    { 
     return string.Format("Hello World!"); 
    } 
} 

這實際上是從我的uni教程中獲取:我們首先爲我們的服務創建接口,與上週不同,我們只是簡單地創建WCF服務對象在第一個例子中。這是爲了在教程中及時保存。最佳實踐意味着我們應該爲所有服務創建接口,這與所定義的服務合同有關。首先在Visual Studio 2008中創建一個新項目(請記住添加System.ServiceModel和System.ServiceModel.Web引用,以及這兩個命名空間的使用聲明),並添加以下類定義:

[ServiceContract] 
public class HelloWorldService 
{ 
[OperationContract] 
[WebGet(UriTemplate="")] 
public string HelloWorld() 
{ 
return "Hello world!"; 
} 
} 

你應該熟悉上週教程中這個WCF服務的基本結構。區別在於我們添加到方法中的額外屬性: [WebGet(UriTemplate =「」)] 此屬性指出該服務接收HTTP GET消息(WebGet部分),並且URL的其餘部分不是與服務終點相關(在後面的例子後這將變得更清楚)。要託管此服務,我們需要以下主要應用程序:

+0

的可能重複[修飾符公衆不適用於這個項目(http://stackoverflow.com/questions/3652717/the-modifier-public-is-not-valid-for-這個項目) – 2012-03-18 21:43:16

回答

6

interface聲明中的成員不能具有訪問修飾符。它們隱含地具有與包含interface相同的可訪問性。如果您可以訪問接口,您可以訪問所有它的成員

+0

是真的。我還補充說,你將無法在接口中定義方法實現。這不是什麼接口!您可能需要刪除那裏的實施。在其他情況下,將其更改爲抽象類或類可能是有意義的,因此您可以提供實現。 – 2012-03-15 22:42:56

+0

我如何得到即時消息試圖做什麼我有這個教程,它說這樣做,但它不工作? – 2012-03-15 22:43:06

+0

@Garrith如果教程中說你需要在'interface'中定義'HelloWorld',那麼這是錯誤的。只要刪除'公共'那裏,你應該很好去 – JaredPar 2012-03-15 22:44:13

1

從文檔:

Interfaces declared directly within a namespace can be declared as public or internal and, just like classes and structs, interfaces default to internal access. Interface members are always public because the purpose of an interface is to enable other types to access a class or struct. No access modifiers can be applied to interface members.

來源:http://msdn.microsoft.com/en-us/library/ms173121%28v=vs.100%29.aspx

0

你不能聲明在C#接口的可訪問性。你的接口方法也不能實現。

3

您不能在接口中指定作用域或方法體。試試這個:

namespace WcfService1 
{ 
    // NOTE: You can use the "Rename" command on the "Refactor" menu to change the interface name "IService1" in both code and config file together. 
    [ServiceContract] 
    public interface HelloWorldService 
    { 
     [OperationContract] 
     [WebGet(UriTemplate = "")] 

     string HelloWorld(); 
    } 
}