C#でのAzure Functionsの呼び出しにはまった
Azure Functions(HttpTrigger)で何らかのFunctionsを追加すると、通常は、
https://xxxxxx.azurewebsites.net/api/xxxxx的なURLが作成されます。
で、以下のコードを書きました。
WebClient wc = new WebClient(); string url = "https://xxxxxx.azurewebsites.net/api/xxxxx"; Stream st = wc.OpenRead(url); Encoding enc = Encoding.GetEncoding("utf-8"); StreamReader sr = new StreamReader(st, enc); string html = sr.ReadToEnd(); sr.Close(); st.Close(); Console.WriteLine(html);
そうると、、、、呼び出し時にエラーとなります。
>bin\Debug\ConsoleApplication1.exe ハンドルされていない例外: System.Net.WebException: 接続が切断されました: 送信時に、予期しないエラーが発生しました。。 ---> System.IO.IOException: 転送接続からデータを読み取れません: 既存の接続はリモート ホストに強制的に切断されました。。 ---> System.Net.Sockets.SocketException: 既存の接続はリモート ホストに強制的に切断されました。 場所 System.Net.Sockets.Socket.Receive(Byte[] buffer, Int32 offset, Int32 size, SocketFlags socketFlags) : :
Functionsの何か書き方がまずいのかとか、、、半日くらいいろいろ試行錯誤しました。
一晩寝たところ、なんと https を http に変えたら動くんじゃないかという神のお告げが。。。。
そして見事動きました!
でも何か悶々としていて、数日後にググってみると、今のページへめぐり逢い。。。。
fullvirtue.com
ちなみにHttpClientでも同様なようです。
qiita.com
なんと、一行追加するだけで動きましたとさ。
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; WebClient wc = new WebClient(); string url = "https://xxxxxx.azurewebsites.net/api/xxxxx"; Stream st = wc.OpenRead(url); Encoding enc = Encoding.GetEncoding("utf-8"); StreamReader sr = new StreamReader(st, enc); string html = sr.ReadToEnd(); sr.Close(); st.Close(); Console.WriteLine(html);
めでたしめでたし。