QA@IT
«回答へ戻る

環境について1行追記

5599
 
 環境: Win 8.1 pro, Visual Studio 2013 pro, IIS 8.5 (win8.1付属) と IIS開発サーバー
 
+追記: DefaultAppPoolで実行させているので、統合(Integrated)パイプラインモードで動作させています。
+
 プロジェクトは WCFサービスアプリケーション、 ASP.NET WebアプリケーションのWebFormだけチェックしたものの両方で試しました。
 
 * web.configのservicemodelやサービスのソースは変えてません(変えなくて済むようにソリューション/プロジェクトもShopにしてます)。

structureさんのソースで試してみました。

環境: Win 8.1 pro, Visual Studio 2013 pro, IIS 8.5 (win8.1付属) と IIS開発サーバー

追記: DefaultAppPoolで実行させているので、統合(Integrated)パイプラインモードで動作させています。

プロジェクトは WCFサービスアプリケーション、 ASP.NET WebアプリケーションのWebFormだけチェックしたものの両方で試しました。

  • web.configのservicemodelやサービスのソースは変えてません(変えなくて済むようにソリューション/プロジェクトもShopにしてます)。
  • Webアプリケーションの方は、ファイル名がTESTxxxなのに、Behindのクラス名がDaishinだったりしたのでそのあたりを提示されたソースに併せたぐらいであとは貼り付けただけです。
  • WCFサービスアプリケーションの方は、上記に加えて、aspxのマスターページの部分とかタグの不整合などはなおしましたが、他はそのままです。

本筋とは別で気になるところはいろいろあるんですが、
結論から言えば、サービス側のソースはそれで動作します。
問題はjQueryのリクエストURLです。

IISに配置した際、TEST アプリケーションとして配置してる(サーバーからみて http://localhost/TEST の位置)と思いますが、scriptで指定しているURLがここを指していません。

url: '/TestWCF.svc/fnVerifyID' は「サーバーのルートディレクトリのTestWCF.svc」の意味になります。
これはつまり http://localhost/TESTWCF.svc/fnVerifyID ということです。

開発サーバーの場合は、アプリケーションはルートディレクトリに配置されているように実行されますので、
http://localhost:ランダムなポート/TESTWCF.svc/fnVerifyID でアクセスできますが、
IISの http://localhost/TESTに配置しているので、jQueryからhttp://localhost/TEST/TESTWCF.svc/fnVerifyID となるようなurlを指定しないといけません。

幸いASP.NET WebFormにも他のWebアプリケーション同様アプリケーションルートを求めるメソッドがありますので、ここではそれを利用するといいでしょう。

url: '/TestWCF.svc/fnVerifyID', // ポスト先のURL

url: '<%=ResolveUrl("~/TestWCF.svc/fnVerifyID")%>', // ポスト先のURL

に、変えてみてください。これで上手くいくんじゃないかと思います。
ブラウザで表示されたら開発サーバーでの実行時とIISでの実行時で該当箇所がどうなっているか確認してみてください。

qait9554_success.png

ちなみに、この状態で、http://localhost/TEST/TESTWCF.svchttp://localhost/TEST/TESTWCF.svc/fnVerifyID にアクセスするとそれぞれこうなります。
スクリプト直したのは関係なくもともとこういう状態だったと思います。

structureさんが見た画面も下の1枚目じゃないでしょうか。


qait9554_endpoint_not_found.png


qait9554_svc_function_with_browser.png


最後に気になった点をいくつか。これは興味があればどうぞ。

  • ~のView Markup~のView Codeという説明がみられるが、VSの日本語パックを当てていないのでは?

Visual Studioが英語のままじゃないですか?
Visual Studio Community Editionは初期状態で英語ですが、別途 公式の Language Packをダウンロード可能です。
それを適用すれば標準メニューは日本語にできます。好きで英語版をつかっているなら別ですが、日本語化したい場合は、

https://www.visualstudio.com/ja-jp/downloads/download-visual-studio-vs#DownloadFamilies_2

の左側から Visual Studio 2013 を展開して Community 2013を選び、
Visual Studio 2013 Language Pack から取得、日本語化できるはずです。
私はCommunityを使っているわけではないので参考情報としてどうぞ。

VS2013_com_lp_dl_button.png

  • TESTWCF.svcのマークアップのコードビハインドが提示ソースと異なる。

先頭が書けてるの補足してますが、 以下の様に

<%ServiceHost Language="VB" Debug="true" Service="Shop.DaishinWCF" CodeBehind="DaishinWCF.svc.vb" Factory="System.ServiceModel.Activation.WebServiceHostFactory"%>

CodeBehind="DaishinWCF.svc.vb"

となってますが、ソースのファイル名としては 「TESTWCF.svc.vbのView Code」となってますので、CodeBehind="TESTWCF.svc.vb" でしょう (少なくともここに提示したソースだと)。

  • IService1 は今回の部分では不要

多分使われてないです。Ajaxじゃない WCFサービスだとインターフェース定義して実装してというテンプレートになるんですけどね。インターフェースを使ってはいけないわけではないですが、現状は消してもコンパイル・実行できるかと。

  • VB.NETのソースで気になった点
  1. Functionの戻り値の型を指定しましょう。
  2. 関数名は先頭大文字
  3. 変数名は先頭小文字 (プロパティ Name は先頭大文字のままで大丈夫)
  4. クラス名は先頭大文字

の、方が一般的な .NETコード スタイルになると思います(あくまでざっくりとしたものです、細かくはもうちょっといろいろあります)。
プロジェクトのコーディング標準などもあるかもしれませんが、例えば以下の様なコードの方がスタイルとしては一般的かなと思いますので、ご参考までに。

<ServiceContract(Namespace:="")> _
<AspNetCompatibilityRequirements(RequirementsMode:=AspNetCompatibilityRequirementsMode.Allowed)>
Public Class DaishinWCF

    <WebGet()>
    Public Function VerifyID(ByVal id As String, ByVal pass As String) As String
        Dim hyouji As String = CStr(id) & CStr(pass) 
        Dim veryfyIdResult As New CsVerifyID()
        veryfyIdResult.Name = "接続成功"
        Dim person As String = JsonConvert.SerializeObject(veryfyIdResult)
        Return person
    End Function

End Class

(CStrも idと passが String なので無くて良い気がしますが、ひょっとしてnull(Nothing)回避のためですかね?)

長くなりましたが、以上です。

structureさんのソースで試してみました。

環境: Win 8.1 pro, Visual Studio 2013 pro, IIS 8.5 (win8.1付属) と IIS開発サーバー

追記: DefaultAppPoolで実行させているので、統合(Integrated)パイプラインモードで動作させています。

プロジェクトは WCFサービスアプリケーション、 ASP.NET WebアプリケーションのWebFormだけチェックしたものの両方で試しました。

* web.configのservicemodelやサービスのソースは変えてません(変えなくて済むようにソリューション/プロジェクトもShopにしてます)。
* Webアプリケーションの方は、ファイル名がTESTxxxなのに、Behindのクラス名がDaishinだったりしたのでそのあたりを提示されたソースに併せたぐらいであとは貼り付けただけです。
* WCFサービスアプリケーションの方は、上記に加えて、aspxのマスターページの部分とかタグの不整合などはなおしましたが、他はそのままです。



本筋とは別で気になるところはいろいろあるんですが、
結論から言えば、サービス側のソースはそれで動作します。
問題はjQueryのリクエストURLです。

IISに配置した際、TEST アプリケーションとして配置してる(サーバーからみて `http://localhost/TEST` の位置)と思いますが、scriptで指定しているURLがここを指していません。

`url: '/TestWCF.svc/fnVerifyID'` は「サーバーのルートディレクトリのTestWCF.svc」の意味になります。
これはつまり `http://localhost/TESTWCF.svc/fnVerifyID` ということです。

開発サーバーの場合は、アプリケーションはルートディレクトリに配置されているように実行されますので、
`http://localhost:ランダムなポート/TESTWCF.svc/fnVerifyID` でアクセスできますが、 
IISの `http://localhost/TEST`に配置しているので、jQueryから`http://localhost/TEST/TESTWCF.svc/fnVerifyID` となるようなurlを指定しないといけません。

幸いASP.NET WebFormにも他のWebアプリケーション同様アプリケーションルートを求めるメソッドがありますので、ここではそれを利用するといいでしょう。

```javascript
url: '/TestWCF.svc/fnVerifyID', // ポスト先のURL
```
を
```javascript
url: '<%=ResolveUrl("~/TestWCF.svc/fnVerifyID")%>', // ポスト先のURL
```
に、変えてみてください。これで上手くいくんじゃないかと思います。
ブラウザで表示されたら開発サーバーでの実行時とIISでの実行時で該当箇所がどうなっているか確認してみてください。

![qait9554_success.png](https://qa-atmarkit-image.s3.amazonaws.com/uploads/attached_image/image/117/qait9554_success.png)


ちなみに、この状態で、`http://localhost/TEST/TESTWCF.svc` と `http://localhost/TEST/TESTWCF.svc/fnVerifyID` にアクセスするとそれぞれこうなります。
スクリプト直したのは関係なくもともとこういう状態だったと思います。

structureさんが見た画面も下の1枚目じゃないでしょうか。

---

![qait9554_endpoint_not_found.png](https://qa-atmarkit-image.s3.amazonaws.com/uploads/attached_image/image/118/qait9554_endpoint_not_found.png)

---

![qait9554_svc_function_with_browser.png](https://qa-atmarkit-image.s3.amazonaws.com/uploads/attached_image/image/119/qait9554_svc_function_with_browser.png)

---

最後に気になった点をいくつか。これは興味があればどうぞ。

* `~のView Markup`の `~のView Code`という説明がみられるが、VSの日本語パックを当てていないのでは?

Visual Studioが英語のままじゃないですか?
Visual Studio Community Editionは初期状態で英語ですが、別途 公式の Language Packをダウンロード可能です。
それを適用すれば標準メニューは日本語にできます。好きで英語版をつかっているなら別ですが、日本語化したい場合は、

https://www.visualstudio.com/ja-jp/downloads/download-visual-studio-vs#DownloadFamilies_2

の左側から Visual Studio 2013 を展開して Community 2013を選び、
Visual Studio 2013 Language Pack から取得、日本語化できるはずです。
私はCommunityを使っているわけではないので参考情報としてどうぞ。

![VS2013_com_lp_dl_button.png](https://qa-atmarkit-image.s3.amazonaws.com/uploads/attached_image/image/120/VS2013_com_lp_dl_button.png)

* TESTWCF.svcのマークアップのコードビハインドが提示ソースと異なる。

先頭が書けてるの補足してますが、 以下の様に

```xml
<%ServiceHost Language="VB" Debug="true" Service="Shop.DaishinWCF" CodeBehind="DaishinWCF.svc.vb" Factory="System.ServiceModel.Activation.WebServiceHostFactory"%>
```

`CodeBehind="DaishinWCF.svc.vb"`

となってますが、ソースのファイル名としては 「TESTWCF.svc.vbのView Code」となってますので、`CodeBehind="TESTWCF.svc.vb"` でしょう (少なくともここに提示したソースだと)。

* IService1 は今回の部分では不要

多分使われてないです。Ajaxじゃない WCFサービスだとインターフェース定義して実装してというテンプレートになるんですけどね。インターフェースを使ってはいけないわけではないですが、現状は消してもコンパイル・実行できるかと。

* VB.NETのソースで気になった点

1. Functionの戻り値の型を指定しましょう。
2. 関数名は先頭大文字
3. 変数名は先頭小文字 (プロパティ Name は先頭大文字のままで大丈夫)
4. クラス名は先頭大文字

の、方が一般的な .NETコード スタイルになると思います(あくまでざっくりとしたものです、細かくはもうちょっといろいろあります)。
プロジェクトのコーディング標準などもあるかもしれませんが、例えば以下の様なコードの方がスタイルとしては一般的かなと思いますので、ご参考までに。

```vb
<ServiceContract(Namespace:="")> _
<AspNetCompatibilityRequirements(RequirementsMode:=AspNetCompatibilityRequirementsMode.Allowed)>
Public Class DaishinWCF

    <WebGet()>
    Public Function VerifyID(ByVal id As String, ByVal pass As String) As String
        Dim hyouji As String = CStr(id) & CStr(pass) 
        Dim veryfyIdResult As New CsVerifyID()
        veryfyIdResult.Name = "接続成功"
        Dim person As String = JsonConvert.SerializeObject(veryfyIdResult)
        Return person
    End Function

End Class
```

(CStrも idと passが String なので無くて良い気がしますが、ひょっとしてnull(Nothing)回避のためですかね?)

長くなりましたが、以上です。

回答を投稿

structureさんのソースで試してみました。

環境: Win 8.1 pro, Visual Studio 2013 pro, IIS 8.5 (win8.1付属) と IIS開発サーバー

プロジェクトは WCFサービスアプリケーション、 ASP.NET WebアプリケーションのWebFormだけチェックしたものの両方で試しました。

  • web.configのservicemodelやサービスのソースは変えてません(変えなくて済むようにソリューション/プロジェクトもShopにしてます)。
  • Webアプリケーションの方は、ファイル名がTESTxxxなのに、Behindのクラス名がDaishinだったりしたのでそのあたりを提示されたソースに併せたぐらいであとは貼り付けただけです。
  • WCFサービスアプリケーションの方は、上記に加えて、aspxのマスターページの部分とかタグの不整合などはなおしましたが、他はそのままです。

本筋とは別で気になるところはいろいろあるんですが、
結論から言えば、サービス側のソースはそれで動作します。
問題はjQueryのリクエストURLです。

IISに配置した際、TEST アプリケーションとして配置してる(サーバーからみて http://localhost/TEST の位置)と思いますが、scriptで指定しているURLがここを指していません。

url: '/TestWCF.svc/fnVerifyID' は「サーバーのルートディレクトリのTestWCF.svc」の意味になります。
これはつまり http://localhost/TESTWCF.svc/fnVerifyID ということです。

開発サーバーの場合は、アプリケーションはルートディレクトリに配置されているように実行されますので、
http://localhost:ランダムなポート/TESTWCF.svc/fnVerifyID でアクセスできますが、
IISの http://localhost/TESTに配置しているので、jQueryからhttp://localhost/TEST/TESTWCF.svc/fnVerifyID となるようなurlを指定しないといけません。

幸いASP.NET WebFormにも他のWebアプリケーション同様アプリケーションルートを求めるメソッドがありますので、ここではそれを利用するといいでしょう。

url: '/TestWCF.svc/fnVerifyID', // ポスト先のURL

url: '<%=ResolveUrl("~/TestWCF.svc/fnVerifyID")%>', // ポスト先のURL

に、変えてみてください。これで上手くいくんじゃないかと思います。
ブラウザで表示されたら開発サーバーでの実行時とIISでの実行時で該当箇所がどうなっているか確認してみてください。

qait9554_success.png

ちなみに、この状態で、http://localhost/TEST/TESTWCF.svchttp://localhost/TEST/TESTWCF.svc/fnVerifyID にアクセスするとそれぞれこうなります。
スクリプト直したのは関係なくもともとこういう状態だったと思います。

structureさんが見た画面も下の1枚目じゃないでしょうか。


qait9554_endpoint_not_found.png


qait9554_svc_function_with_browser.png


最後に気になった点をいくつか。これは興味があればどうぞ。

  • ~のView Markup~のView Codeという説明がみられるが、VSの日本語パックを当てていないのでは?

Visual Studioが英語のままじゃないですか?
Visual Studio Community Editionは初期状態で英語ですが、別途 公式の Language Packをダウンロード可能です。
それを適用すれば標準メニューは日本語にできます。好きで英語版をつかっているなら別ですが、日本語化したい場合は、

https://www.visualstudio.com/ja-jp/downloads/download-visual-studio-vs#DownloadFamilies_2

の左側から Visual Studio 2013 を展開して Community 2013を選び、
Visual Studio 2013 Language Pack から取得、日本語化できるはずです。
私はCommunityを使っているわけではないので参考情報としてどうぞ。

VS2013_com_lp_dl_button.png

  • TESTWCF.svcのマークアップのコードビハインドが提示ソースと異なる。

先頭が書けてるの補足してますが、 以下の様に

<%ServiceHost Language="VB" Debug="true" Service="Shop.DaishinWCF" CodeBehind="DaishinWCF.svc.vb" Factory="System.ServiceModel.Activation.WebServiceHostFactory"%>

CodeBehind="DaishinWCF.svc.vb"

となってますが、ソースのファイル名としては 「TESTWCF.svc.vbのView Code」となってますので、CodeBehind="TESTWCF.svc.vb" でしょう (少なくともここに提示したソースだと)。

  • IService1 は今回の部分では不要

多分使われてないです。Ajaxじゃない WCFサービスだとインターフェース定義して実装してというテンプレートになるんですけどね。インターフェースを使ってはいけないわけではないですが、現状は消してもコンパイル・実行できるかと。

  • VB.NETのソースで気になった点
  1. Functionの戻り値の型を指定しましょう。
  2. 関数名は先頭大文字
  3. 変数名は先頭小文字 (プロパティ Name は先頭大文字のままで大丈夫)
  4. クラス名は先頭大文字

の、方が一般的な .NETコード スタイルになると思います(あくまでざっくりとしたものです、細かくはもうちょっといろいろあります)。
プロジェクトのコーディング標準などもあるかもしれませんが、例えば以下の様なコードの方がスタイルとしては一般的かなと思いますので、ご参考までに。

<ServiceContract(Namespace:="")> _
<AspNetCompatibilityRequirements(RequirementsMode:=AspNetCompatibilityRequirementsMode.Allowed)>
Public Class DaishinWCF

    <WebGet()>
    Public Function VerifyID(ByVal id As String, ByVal pass As String) As String
        Dim hyouji As String = CStr(id) & CStr(pass) 
        Dim veryfyIdResult As New CsVerifyID()
        veryfyIdResult.Name = "接続成功"
        Dim person As String = JsonConvert.SerializeObject(veryfyIdResult)
        Return person
    End Function

End Class

(CStrも idと passが String なので無くて良い気がしますが、ひょっとしてnull(Nothing)回避のためですかね?)

長くなりましたが、以上です。

structureさんのソースで試してみました。

環境: Win 8.1 pro, Visual Studio 2013 pro, IIS 8.5 (win8.1付属) と IIS開発サーバー

プロジェクトは WCFサービスアプリケーション、 ASP.NET WebアプリケーションのWebFormだけチェックしたものの両方で試しました。

* web.configのservicemodelやサービスのソースは変えてません(変えなくて済むようにソリューション/プロジェクトもShopにしてます)。
* Webアプリケーションの方は、ファイル名がTESTxxxなのに、Behindのクラス名がDaishinだったりしたのでそのあたりを提示されたソースに併せたぐらいであとは貼り付けただけです。
* WCFサービスアプリケーションの方は、上記に加えて、aspxのマスターページの部分とかタグの不整合などはなおしましたが、他はそのままです。



本筋とは別で気になるところはいろいろあるんですが、
結論から言えば、サービス側のソースはそれで動作します。
問題はjQueryのリクエストURLです。

IISに配置した際、TEST アプリケーションとして配置してる(サーバーからみて `http://localhost/TEST` の位置)と思いますが、scriptで指定しているURLがここを指していません。

`url: '/TestWCF.svc/fnVerifyID'` は「サーバーのルートディレクトリのTestWCF.svc」の意味になります。
これはつまり `http://localhost/TESTWCF.svc/fnVerifyID` ということです。

開発サーバーの場合は、アプリケーションはルートディレクトリに配置されているように実行されますので、
`http://localhost:ランダムなポート/TESTWCF.svc/fnVerifyID` でアクセスできますが、 
IISの `http://localhost/TEST`に配置しているので、jQueryから`http://localhost/TEST/TESTWCF.svc/fnVerifyID` となるようなurlを指定しないといけません。

幸いASP.NET WebFormにも他のWebアプリケーション同様アプリケーションルートを求めるメソッドがありますので、ここではそれを利用するといいでしょう。

```javascript
url: '/TestWCF.svc/fnVerifyID', // ポスト先のURL
```
を
```javascript
url: '<%=ResolveUrl("~/TestWCF.svc/fnVerifyID")%>', // ポスト先のURL
```
に、変えてみてください。これで上手くいくんじゃないかと思います。
ブラウザで表示されたら開発サーバーでの実行時とIISでの実行時で該当箇所がどうなっているか確認してみてください。

![qait9554_success.png](https://qa-atmarkit-image.s3.amazonaws.com/uploads/attached_image/image/117/qait9554_success.png)


ちなみに、この状態で、`http://localhost/TEST/TESTWCF.svc` と `http://localhost/TEST/TESTWCF.svc/fnVerifyID` にアクセスするとそれぞれこうなります。
スクリプト直したのは関係なくもともとこういう状態だったと思います。

structureさんが見た画面も下の1枚目じゃないでしょうか。

---

![qait9554_endpoint_not_found.png](https://qa-atmarkit-image.s3.amazonaws.com/uploads/attached_image/image/118/qait9554_endpoint_not_found.png)

---

![qait9554_svc_function_with_browser.png](https://qa-atmarkit-image.s3.amazonaws.com/uploads/attached_image/image/119/qait9554_svc_function_with_browser.png)

---

最後に気になった点をいくつか。これは興味があればどうぞ。

* `~のView Markup`の `~のView Code`という説明がみられるが、VSの日本語パックを当てていないのでは?

Visual Studioが英語のままじゃないですか?
Visual Studio Community Editionは初期状態で英語ですが、別途 公式の Language Packをダウンロード可能です。
それを適用すれば標準メニューは日本語にできます。好きで英語版をつかっているなら別ですが、日本語化したい場合は、

https://www.visualstudio.com/ja-jp/downloads/download-visual-studio-vs#DownloadFamilies_2

の左側から Visual Studio 2013 を展開して Community 2013を選び、
Visual Studio 2013 Language Pack から取得、日本語化できるはずです。
私はCommunityを使っているわけではないので参考情報としてどうぞ。

![VS2013_com_lp_dl_button.png](https://qa-atmarkit-image.s3.amazonaws.com/uploads/attached_image/image/120/VS2013_com_lp_dl_button.png)

* TESTWCF.svcのマークアップのコードビハインドが提示ソースと異なる。

先頭が書けてるの補足してますが、 以下の様に

```xml
<%ServiceHost Language="VB" Debug="true" Service="Shop.DaishinWCF" CodeBehind="DaishinWCF.svc.vb" Factory="System.ServiceModel.Activation.WebServiceHostFactory"%>
```

`CodeBehind="DaishinWCF.svc.vb"`

となってますが、ソースのファイル名としては 「TESTWCF.svc.vbのView Code」となってますので、`CodeBehind="TESTWCF.svc.vb"` でしょう (少なくともここに提示したソースだと)。

* IService1 は今回の部分では不要

多分使われてないです。Ajaxじゃない WCFサービスだとインターフェース定義して実装してというテンプレートになるんですけどね。インターフェースを使ってはいけないわけではないですが、現状は消してもコンパイル・実行できるかと。

* VB.NETのソースで気になった点

1. Functionの戻り値の型を指定しましょう。
2. 関数名は先頭大文字
3. 変数名は先頭小文字 (プロパティ Name は先頭大文字のままで大丈夫)
4. クラス名は先頭大文字

の、方が一般的な .NETコード スタイルになると思います(あくまでざっくりとしたものです、細かくはもうちょっといろいろあります)。
プロジェクトのコーディング標準などもあるかもしれませんが、例えば以下の様なコードの方がスタイルとしては一般的かなと思いますので、ご参考までに。

```vb
<ServiceContract(Namespace:="")> _
<AspNetCompatibilityRequirements(RequirementsMode:=AspNetCompatibilityRequirementsMode.Allowed)>
Public Class DaishinWCF

    <WebGet()>
    Public Function VerifyID(ByVal id As String, ByVal pass As String) As String
        Dim hyouji As String = CStr(id) & CStr(pass) 
        Dim veryfyIdResult As New CsVerifyID()
        veryfyIdResult.Name = "接続成功"
        Dim person As String = JsonConvert.SerializeObject(veryfyIdResult)
        Return person
    End Function

End Class
```

(CStrも idと passが String なので無くて良い気がしますが、ひょっとしてnull(Nothing)回避のためですかね?)

長くなりましたが、以上です。