質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
WCF

WCFは、.NET Frameworkの提供する機能の一つ。サービス指向アプリケーション構築のためのフレームワークです。ネットワークを通して、異なるコンピュータ上で動くソフトウェア間の通信が可能になります。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

REST

REST(Representational State Transfer)はwebアプリケーションの構築スタイルの一種です。HTTP GET/POSTによってリクエストを送信し、レスポンスはXMLで返されます。SOAPのようなRPCの構築と比べるとサーバからクライアントを分離することが出来る為、人気です。

Q&A

解決済

1回答

6742閲覧

WCFのテスト時エラーが出ます→「リモート サーバーから予期しない応答が返されました: (400) Bad Request。」

RI_KU

総合スコア24

WCF

WCFは、.NET Frameworkの提供する機能の一つ。サービス指向アプリケーション構築のためのフレームワークです。ネットワークを通して、異なるコンピュータ上で動くソフトウェア間の通信が可能になります。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

REST

REST(Representational State Transfer)はwebアプリケーションの構築スタイルの一種です。HTTP GET/POSTによってリクエストを送信し、レスポンスはXMLで返されます。SOAPのようなRPCの構築と比べるとサーバからクライアントを分離することが出来る為、人気です。

0グッド

0クリップ

投稿2017/03/17 06:53

編集2017/03/17 08:17

■Visual Studo2010
■.netFramework3.5
////////////////////////////////_/

■PjStartStatusRestApp(サービス(Iサービスを実装)とIサービスが入っているプロジェクト)
対象フレームワーク.NET Framework3.5

■restSample(Form1.cs, App.configが配置されている)
対象フレームワーク.NET Framework3.5

■/pjRestWeb(webサイトかつweb.configが配置されている)
対象フレームワーク.NET Framework4.0

webサイトと対象フレームワークを合わせても変わりませんでした。
////////////////////////////////_/
【Form1.cs】
『int result = service.PjStrSttsUpdater(mode.Text, code.Text, すsubcode.Text);』の部分で掲題のエラーが発生します。
フォームのボタンを押したらテキストボックスの文字列を取得して、DBの更新結果をラベルに表示するだけの簡単な処理なので、フォームのボタンをポチポチ連打していたら突然発生しました。

C#

1using System; 2using System.Collections.Generic; 3using System.ComponentModel; 4using System.Data; 5using System.Drawing; 6using System.Linq; 7using System.Text; 8using System.Windows.Forms; 9using 【namespace】.PjStatusRestApp; 10using System.IO; 11using System.Runtime.Serialization; 12using System.ServiceModel.Activation; 13using System.ServiceModel.Web; 14using System.Web; 15using System.Diagnostics; 16 17namespace 【namespace】.restSample 18{ 19 public partial class Form1 : Form 20 { 21 public Form1() 22 { 23 InitializeComponent(); 24 this.label1.Text = "return"; 25 this.mode.Text = string.Empty; 26 this.pjsbno.Text = string.Empty; 27 this.pjcode.Text = string.Empty; 28 this.labelReslt.Text = string.Empty; 29 } 30 31 private void button1_Click(object sender, EventArgs e) 32 { 33 try 34 { 35 // 20170313 UIに記述 36 var factory = new WebChannelFactory<IPjStartApplication>(new Uri(ConfigUtil.GetSISetting("PjStartApplication.Url"))); 37 var service = factory.CreateChannel(); 38******************************ココ********************** 39 int result = service.PjStrSttsUpdater(mode.Text, code.Text, subcode.Text); 40****************************************************** 41 string resultMessage = string.Empty; 42 if (result == 200) resultMessage = "正常終了"; 43 else if (result == 400) resultMessage = "パラメータ不正"; 44 else if (result == 401) resultMessage = "申請ステータスが同じ"; 45 46 // 結果の表示 47 labelReslt.Text = resultMessage; 48 49 // ここまで 50 } 51 catch (Exception ex) 52 { 53 // エラーだった場合はイベントログに内容を出力 54 LogWriter.CreateInstance().Write(LogLevel.Error, ex.Message, ex); 55 } 56 } 57 } 58} 59

クライアント側(このフォームからテキストを送っています)
App.config

XML

1<?xml version="1.0" encoding="utf-8"?> 2<configuration> 3 <system.serviceModel> 4 <client> 5 <endpoint name="PjStartApplicationClientEndpoint" address="http://localhost:55723/【path】/PjStrSttsUpdater" binding="webHttpBinding" contract="【namespace】.PjStartApplication"/> 6 </client> 7 </system.serviceModel> 8</configuration> 9

サーバ側 web.config

XML

1<?xml version="1.0" encoding="utf-8"?> 2<configuration> 3 <system.web> 4 <compilation debug="true" targetFramework="4.0"/> 5 </system.web> 6 7 <system.serviceModel> 8 <serviceHostingEnvironment aspNetCompatibilityEnabled="true"/> 9 <services> 10 <service name="【namespace】.PjStartApplication" behaviorConfiguration="NewBehavior"> 11 <endpoint address="" behaviorConfiguration="ServiceBehavior" binding="webHttpBinding" bindingConfiguration="" contract="【namespace】.IPjStartApplication"/> 12 </service> 13 </services> 14 <behaviors> 15 <endpointBehaviors> 16 <behavior name="ServiceBehavior"> 17 <webHttp/> 18 </behavior> 19 </endpointBehaviors> 20 <serviceBehaviors> 21 <behavior name="NewBehavior"> 22 <serviceMetadata httpGetEnabled="true"/> 23 </behavior> 24 </serviceBehaviors> 25 </behaviors> 26 <bindings/> 27 </system.serviceModel> 28</configuration>

ブラウザを起動してテストしているわけではないですが、一応ブラウザのキャッシュクリアも試したのですが、ダメでした。

調べても有力な情報を見つけることができず一日詰まっております。。。

<<2017/03/17 17:09 追記>>
■Interface

C#

1namespace 【namespace】.PjStatusRestApp 2{ 3 /// <summary> 4 /// 状況更新サービス 5 /// </summary> 6 [ServiceContract] 7 public interface IPjStartApplication 8 { 9 /// <summary> 10 /// 状況更新 11 /// </summary> 12 /// <param name="PjStrSttsUpdater"></param> 13 [OperationContract] 14 [WebInvoke( 15 Method = "POST", 16 BodyStyle = WebMessageBodyStyle.Wrapped, 17 //RequestFormat = WebMessageFormat.Json, 18 //ResponseFormat = WebMessageFormat.Json, 19 UriTemplate = "PjStrSttsUpdater")] 20 int PjStrSttsUpdater(string mode, string code, string subcode); 21 22 } 23}

■サービス

C#

1namespace 【namespace】.PjStatusRestApp 2{ 3 [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)] 4 public class PjStartApplication : IPjStartApplication 5 { 6 public int PjStrSttsUpdater(string mode, string code, string subcode) 7 { 8 { 9 #region 更新処理 10 using (SqlConnection cnn = "Connection取得処理") 11 { 12 string connectionString = string.Empty; 13 connectionString = "DB接続用文字列"; 14 cnn.ConnectionString = connectionString; 15 cnn.Open(); 16 SqlCommand cmd = new SqlCommand(); 17 cmd.Connection = cnn; 18 cmd.CommandType = CommandType.StoredProcedure; 19 20 cmd.CommandText = "[dbo].[PjStartStatusUpdate]"; 21 cmd.Parameters.Clear(); 22 cmd.Parameters.Add("@MODE", System.Data.SqlDbType.NVarChar).Value = mode; 23 cmd.Parameters.Add("@CODE", System.Data.SqlDbType.NVarChar).Value = code; 24 cmd.Parameters.Add("@SUBCODE", System.Data.SqlDbType.NVarChar).Value = subcode; 25 26 // Return 27 cmd.Parameters.Add("ReturnValue", System.Data.SqlDbType.Int); 28 cmd.Parameters["ReturnValue"].Direction = System.Data.ParameterDirection.ReturnValue; 29 30 // 実行 31 cmd.ExecuteNonQuery(); 32 int returnValue = (int)cmd.Parameters["ReturnValue"].Value; 33 // 戻り値の出力 34 // Debug.WriteLine(returnValue); 35 return returnValue; 36 #endregion 37 } 38 } 39 } 40 } 41} 42

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tamoto

2017/03/17 07:18

> ポチポチ連打していたら突然発生した気がします 気がしますじゃなくて、「連打すると」発生するのか、必ずしもそうではないのか、はっきりして下さい。仮に連打しなくても発生するのであれば、回答の内容がまるっきり変わると思いますよ。
RI_KU

2017/03/17 07:28

連打してたらいきなり発生しました。書き直します。ありがとうございます。
tamoto

2017/03/17 07:43

修正ありがとうございます。もう一つですが、「キャッシュクリアも試したのですが、ダメでした。」とあるので、連打による「不具合の再現性はある」ということで良いんですよね?だとすると、見た感じPjStrSttsUpdaterメソッド内部のほうに問題があると予想されます。根本的な解決をしたい場合はそちらの方に手を入れる必要があると思います。
RI_KU

2017/03/17 08:15

追記いたしました。インターフェースのコメントアウト部Request, ResponseFormat....もコメントアウトを、片方ずつ外す、両方外すなどして実行しましたが変わりませんでした。
guest

回答1

0

自己解決

申し訳ありません。自己解決いたしました。
VS2010のソリューションエクスプローラ上でwebサイト(web.configが置いてある場所)のポート番号を変えることで一時的に解決できました。
やはりキャッシュか何かの問題だったのでしょうか。ポート番号を変えただけなのでボタンを連打したらまた起こりそうですが・・・・。

ありがとうございました。

投稿2017/03/17 09:19

RI_KU

総合スコア24

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問