C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[13]: HttpClientを使用したWCFサービスへの接続について


(過去ログ 148 を表示中)

[トピック内 17 記事 (1 - 17 表示)]  << 0 >>

■86657 / inTopicNo.1)  HttpClientを使用したWCFサービスへの接続について
  
□投稿者/ はるた (1回)-(2018/02/26(Mon) 21:40:07)

分類:[C#] 

以下のようなインターフェースを持つWCFサービスを作成しました。

[ServiceContract]
public interface IService
{
[OperationContract]
[WebInvoke(Method = "POST", UriTemplate = "GetValue", BodyStyle = WebMessageBodyStyle.Wrapped)]
String GetValue(String value);
}

サービス参照を追加してGetValueメソッドにアクセスすることは出来たのですが、

HttpClientを使用して呼び出そうとするとエラーとなってしまいます。


private void button1_Click(object sender, EventArgs e)
{
var r = new Tbtech.HKC.Startup.ServiceReference1.ServiceClient();
var s = r.GetValue("TEST");
MessageBox.Show(s);
}

private async Task<string> GetValue()
{
var httpClient = new HttpClient();
var content = new FormUrlEncodedContent(new Dictionary<string, string>{{"value","TEST"}});
var response = await httpClient.PostAsync("http://localhost:ポート番号/Service.svc/GetValue", content).ConfigureAwait(false);
return await response.Content.ReadAsStringAsync();
}
※この実装だと415、contentに「text/xml」を指定すると400のエラーになります。

どのような原因でエラーが発生すると考えられますでしょうか?

よろしくお願いします。



引用返信 編集キー/
■86658 / inTopicNo.2)  Re[1]: HttpClientを使用したWCFサービスへの接続について
□投稿者/ WebSurfer (1426回)-(2018/02/26(Mon) 22:22:16)
No86657 (はるた さん) に返信

WCF サービスと言っても色々あって、質問者さんがどういうものを作ったのか分か
りませんのでハズレかもしれませんが・・・

ASP.NET がホストする WCF サービスで、JSON データを送信して JSON データを
応答として返す以下のような WCF サービスのメソッドを、

WCF と jQuery AJAX
http://surferonwww.info/BlogEngine/post/2015/10/15/wcf-and-jquery-ajax.aspx

HttpClient を利用して呼び出して JSON 文字列のデータを取得し、それを逆シリ
アル化して C# のオブジェクトに変換するということでよければ、以下の記事が参
考になりませんか?

HttpClient で WCF サービスを呼出
http://surferonwww.info/BlogEngine/post/2018/02/24/request-wcf-service-using-httpclient.aspx

ちなみに、同じ WCF サービスのメソッドを HttpWebRequest / HttpWebResponse を
利用して呼び出す例は以下のようになります。

HttpWebRequest で WCF サービスを呼出
http://surferonwww.info/BlogEngine/post/2017/03/26/request-wcf-service-method-by-using-httpwebrequest.aspx

ハズレだったらすみません。
引用返信 編集キー/
■86659 / inTopicNo.3)  Re[2]: HttpClientを使用したWCFサービスへの接続について
□投稿者/ はるた (3回)-(2018/02/26(Mon) 23:44:05)
回答ありがとうございます。

ご紹介いただいたサイトは既に参照していたのですが、
現在の状況で困っている状況です。

特に「HttpClient で WCF サービスを呼出」についてはかなり近いかと思ったのですが、
プロパティとメソッドの違いからか上手く行きませんでした。

明日、再度参考にしながら試みたいと思います。


引用返信 編集キー/
■86660 / inTopicNo.4)  Re[3]: HttpClientを使用したWCFサービスへの接続について
□投稿者/ WebSurfer (1427回)-(2018/02/27(Tue) 00:17:23)
No86659 (はるた さん) に返信

> ご紹介いただいたサイトは既に参照していたのですが、

その記事は JSON 文字列を送信して、JSON の字列を応答として返す WCF サービスですが、
それでいいのですか?

> 現在の状況で困っている状況です。

「現在の状況」というのは、従来の SOAP でやり取りすることを考えているのでは?
引用返信 編集キー/
■86662 / inTopicNo.5)  Re[4]: HttpClientを使用したWCFサービスへの接続について
□投稿者/ はるた (4回)-(2018/02/27(Tue) 00:37:04)

> 「現在の状況」というのは、従来の SOAP でやり取りすることを考えているのでは?

そうですね現在はSOAP想定で試しています。
JSONでも可能かもしれないですが最終的にはDatasetのやりとりになる可能性が高いので
XMLの方が良いのかなと思っています。

引用返信 編集キー/
■86663 / inTopicNo.6)  Re[5]: HttpClientを使用したWCFサービスへの接続について
□投稿者/ WebSurfer (1428回)-(2018/02/27(Tue) 00:46:47)
No86662 (はるた さん) に返信

> そうですね現在はSOAP想定で試しています。

その辺の話を最初からきちんと書いてください。

でないと質問として成り立たないです。
引用返信 編集キー/
■86664 / inTopicNo.7)  Re[6]: HttpClientを使用したWCFサービスへの接続について
□投稿者/ はるた (5回)-(2018/02/27(Tue) 01:03:45)
すみません。気をつけます。

ただ、現状決まっているわけではないのでよりよい方法を検討しています。
その上で最初の段階で詰まってしまったところです。


引用返信 編集キー/
■86669 / inTopicNo.8)  Re[7]: HttpClientを使用したWCFサービスへの接続について
□投稿者/ Hongliang (617回)-(2018/02/27(Tue) 10:33:19)
SOAPで、と言われている割には、送信しているデータが全くSOAPではない形式ですが?

ネットワーク関連の話はとりあえずパケットキャプチャしてから考えた方が良いです。
引用返信 編集キー/
■86670 / inTopicNo.9)  Re[7]: HttpClientを使用したWCFサービスへの接続について
□投稿者/ WebSurfer (1429回)-(2018/02/27(Tue) 11:01:33)
No86664 (はるた さん) に返信

> ただ、現状決まっているわけではないのでよりよい方法を検討しています。

DataSet をやり取りしたいという方向が定まっているのであれば、DataSet を
直接やり取りできる従前の SOAP でのサービスを利用してはいかがですか?

そうすると、質問者さんが行ったようにサービスプロキシ経由でアクセスする
ということになるはずで、そこに HttpClinet を使うという発想は出てこない
と思うのですが・・・
引用返信 編集キー/
■86671 / inTopicNo.10)  Re[7]: HttpClientを使用したWCFサービスへの接続について
□投稿者/ WebSurfer (1430回)-(2018/02/27(Tue) 12:10:26)
No86664 (はるた さん) に返信

【追伸】

もし、HttpClient を使用したい理由が非同期呼び出しをしたいということであれば、
環境によっては Visual Studio でサービス参照を行うとデフォルトで非同期版メソッ
ドも生成されると思います。

質問者さんの開発環境が書いてないので分かりませんが、確認してみては?
引用返信 編集キー/
■86687 / inTopicNo.11)  Re[8]: HttpClientを使用したWCFサービスへの接続について
□投稿者/ はるた (6回)-(2018/02/27(Tue) 20:15:15)
とっちらかった質問になってしまい申し訳ありません。

今更ですが環境と本来やりたいことを記載します。
windows10 VS2017 .net framework 4.6.1 サーバはwindows2016を予定

引数にDatasetを受け取って結果Datasetを戻すメソッドを一つ持つWCFサービスがあり、
Datasetに入っているパラメータからAssembly.CreateInstanceして各処理を呼び出します。

クライアントからそのサービスへアクセスしたいのですが、
実際にアクセスする処理は共通のDLLに持って、設定ファイルでアドレスを指定して使用したい。

当初はDatasetで試していたのですが、上手く行かずまずはStringでやり取りして動いてから、
Datasetでのやり取りに変更しようと考えていたため、ああいった質問になりました。


引用返信 編集キー/
■86688 / inTopicNo.12)  Re[9]: HttpClientを使用したWCFサービスへの接続について
□投稿者/ WebSurfer (1431回)-(2018/02/27(Tue) 20:40:00)
No86687 (はるた さん) に返信

依然として何がしたいのかよく分かりませんが・・・

> 引数にDatasetを受け取って結果Datasetを戻すメソッドを一つ持つWCFサービスがあり、

そういう既存のサービスがあって、それを利用するという前提であれば、それが利用でき
るようにアプリを作るという話になるはずですよね。

でも、既存のサービスがどうなっているか知る由もない私のようなものには、適切な答え
は出せないのですが・・・

どういうことを回答者に期待されているのでしょう?
引用返信 編集キー/
■86689 / inTopicNo.13)  Re[9]: HttpClientを使用したWCFサービスへの接続について
□投稿者/ WebSurfer (1432回)-(2018/02/27(Tue) 20:45:39)
No86687 (はるた さん) に返信

【追伸】

一つだけ言えるのは、既存のサービスが SOAP を利用していて、それはそのまま
使い続けるのであれば、HttpClient を使うことは考え直した方がよさそうとい
うことです。
引用返信 編集キー/
■86691 / inTopicNo.14)  Re[10]: HttpClientを使用したWCFサービスへの接続について
□投稿者/ はるた (7回)-(2018/02/27(Tue) 23:32:45)
上手く説明できなくてすみません。

既存のサービスがあるわけではないですが、決まったインターフェースを実装したサービスになります。

「A」と「B」の同じインターフェースを持つ2つのサービスが有り、
「C」と「D」というクライアントアプリからそれぞれに接続したいとします。

サービス参照を追加する場合、それぞれ「C」と「D」に追加して接続することになりますが、
それをせずに「E」という共通DLLの持つメソッドに、それぞれ「A」と「B」のアドレスを「C」と「D」から渡して呼び出すことで接続したい。

この構造の場合、サービス参照の追加では出来ないのでは無いかと思い、HttpClientで実現できないかなとトライしています。



引用返信 編集キー/
■86694 / inTopicNo.15)  Re[11]: HttpClientを使用したWCFサービスへの接続について
□投稿者/ WebSurfer (1433回)-(2018/02/28(Wed) 10:17:32)
No86691 (はるた さん) に返信

> この構造の場合、サービス参照の追加では出来ないのでは無いかと思い、

Visual Studio で「A」と「B」それぞれ別に 2 つサービス参照を作っておいて、質問者
さんのコードで、

var r = new Tbtech.HKC.Startup.ServiceReference1.ServiceClient();

とするときに、接続したい方に切り替えるというようなことは NG なのでしょうか?

> HttpClientで実現できないかなとトライしています。

やり取りするのが DataSet だとどうでしょう?

質問者さんが最初の質問で例に挙げたような文字列を送信して文字列を受け取るとい
うような単純な話であれば、難しくはなさそうです。HttpClient SOAP をキーワー
ドにしてググってみてください。例が見つかると思います。

それを DataSet をやり取りできるように拡張することがスキルと工数的に現実的であ
るかどうかを考えて決めるという話になるのではないかと思います。
引用返信 編集キー/
■86721 / inTopicNo.16)  Re[12]: HttpClientを使用したWCFサービスへの接続について
□投稿者/ はるた (8回)-(2018/03/03(Sat) 08:39:41)
>>この構造の場合、サービス参照の追加では出来ないのでは無いかと思い、
>
> Visual Studio で「A」と「B」それぞれ別に 2 つサービス参照を作っておいて、質問者
> さんのコードで、
>
> var r = new Tbtech.HKC.Startup.ServiceReference1.ServiceClient();
>
> とするときに、接続したい方に切り替えるというようなことは NG なのでしょうか?

うまく説明できないのですが、それだと要件が満たせないんです。


> 質問者さんが最初の質問で例に挙げたような文字列を送信して文字列を受け取るとい
> うような単純な話であれば、難しくはなさそうです。HttpClient SOAP をキーワー
> ドにしてググってみてください。例が見つかると思います。

調べてみます。

ただ、当初質問した文字列のやり取りについては、紹介していただいたサイトを参考に実現できました。
web.configにエンドポイントの設定を追加していなかったのが問題でした。

Datasetについては別途調べながらやってみます。
ありがとうございました。




解決済み
引用返信 編集キー/
■86722 / inTopicNo.17)  Re[13]: HttpClientを使用したWCFサービスへの接続について
□投稿者/ WebSurfer (1442回)-(2018/03/03(Sat) 09:50:54)
No86721 (はるた さん) に返信

> ただ、当初質問した文字列のやり取りについては、紹介していただいたサイトを参考に実現できました。
> web.configにエンドポイントの設定を追加していなかったのが問題でした。

それは SOAP を使ってではなく、私が紹介した記事の WCF サービスのように JSON 文字列をやり取りする
ように変更したということでしょうか?

> Datasetについては別途調べながらやってみます。

そうだとすると、JSON 文字列のやり取りになっていますので、JSON 文字列 ⇔ DataSet の変換が必要に
なってきますが、それを今後調べてみるということなのでしょうか?

どういう方針にしたのか情報提供いただけると幸いです。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -