2012-03-15 6 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!"; 
     } 
    } 
} 

のために有効ではありません私のuniからのチュートリアルから:修飾子の公開は、「私はこのエラーを取得するこのアイテム

私たちがサービスのインターフェイスを作成した先週とは異なり、私たちは単にWCFサービスobjecを作成しますこの最初の例ではtsです。これはチュートリアルの中で時間を節約することです。ベスト・プラクティスとは、定義されたサービス契約に関連する、すべてのサービスのインターフェースを作成する必要があることを意味します。まず、Visual Studio 2008内で新しいプロジェクトを作成します(これらの名前空間にSystem.ServiceModelとSystem.ServiceModel.Webの参照とusing宣言を追加することを忘れないでください)。

[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-この項目) –

答えて

6

interfaceのメンバーにはアクセス修飾子を使用できません。彼らは暗黙のうちにinterfaceを含むアクセシビリティと同じアクセシビリティを持っています。あなたがインターフェイスにアクセスできる場合は、ドキュメントからすべてのそれのメンバーに

+0

本当です。また、インターフェイスでメソッドの実装を定義することができないことを追加します。それはどんなインターフェースのためのものではありません!おそらく実装をそこで削除する必要があります。それ以外の場合は、実装を提供できるように抽象クラスまたはクラスに変更すると意味があります。 –

+0

私は何をしようとしているのですか?私はこのチュートリアルを持っています。 –

+0

@Garrithもし 'public'を' HelloWorld'に 'interface'定義で置く必要があるとチュートリアルで言われれば、残念ながら間違っています。そこに 'public'を取り除くだけでよいです。 – JaredPar

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(); 
    } 
} 
の可能複製([モディファイ国民はこのアイテムには有効ではありません]
関連する問題