2017-09-22 11 views
1

私は新しいことを学び、それを学びたいと思っています。私は簡単なHello Worldサーバを書いて、C# console applicationでアクセスしようとしています。ここに私のサーバーは、次のとおりです。C#クライアントGOサーバー

package main 
    import (
    "fmt" 
    "net/" 
    "github.com/labstack/echo" 
) 
func main(){ 
    fmt.Println("Welcome to the Server!") 
    e:=echo.New() 
    e.GET("/", func(c echo.Context) error { 
    return c.String(http.StatusOK, "Yallo from the Server! \n") 
    }) 
} 

私はMozillaと連携this.Itためlabstack/echoパッケージを使用しています。 ここは私のクライアントです。

static void Main(string[] args) 
     { 
      var client = new HttpClient(); 
      string responseString = string.Empty; 
      var task = new Task(async() => 
      { 
       responseString = await client.GetStringAsync("localhost:8000"); 
      }); 
      task.Start(); 
      task.Wait(); 
      Console.WriteLine(responseString); 
      Console.ReadKey(); 
     } 

しかし、私はエラーを取得しています:

An exception of type 'System.ArgumentException' occurred in System.Net.Http.dll but was not handled in user code

Only 'http' and 'https' schemes are allowed.

+4

変更 'client.GetStringAsync( "localhostを:8000");' 'client.GetStringAsync( "のhttp:// localhostを:8000")に;' – levent

答えて

2

asyncキーワードはコンソールアプリケーションで問題を引き起こします。なぜ、誰もが違うと言っているのか分かりません。これはうまくいくでしょう。

var client = new HttpClient(); 
string responseString = string.Empty; 
responseString = client.GetStringAsync("http://localhost:8000").Result; 
Console.WriteLine(responseString); 
Console.ReadKey(); 
+0

あなたは正しいです。しかし、なぜ説明できますか? – bungler

1

注意をGetStringAsync方法は、URIを必要とし、URIは、プロトコル/スキームを必要としていること。言い換えれば、これを試してください:

responseString = await client.GetStringAsync("http://localhost:8000"); 
+0

Yeap、これはエラーを与えるが、ただ与えていません空の文字列。 – bungler

+0

問題を切り分けることができるように、この問題を解決することをお勧めします。たとえば、タスクを待たずに同期をとることで開始し、サーバーが期待値を返すかどうかを確認します。次に、クライアントをより洗練されたものにすることについて心配することができます。 :) –

+0

私が前述したように、サーバーは私のMozillaで文字列を返しています。 'GetStringAsync'メソッドはすでに完了を待っていますか? – bungler

関連する問題