QA@IT
«質問へ戻る

質問を投稿

ASP.NETで、AjaxからWCFサービスを呼び出そうとしたが、IISに配置すると失敗します。

お世話になります。
Microsoft Visual Studio 2013 Community Edhition のWebFormsで開発しております。
開発環境は、Windows8.1,IISのバージョンは8.5です。

1)デバッグ中には(開発サーバを用いると)、LogInMeボタンを押したとき「接続成功」と表示されます。しかし、IISに配置すると「Exeption」ということで失敗してしまいます。
2)IISに配置後、http://localhost/TEST/TEST.aspx”では期待通りページが表示されますが、http://localhost/TEST/TESTWCF.SVC では「エンドポイントが見つかりません」とブラウザに表示されます。

どの部分を修正したら良いでしょうか。あるいはIISの設定等で何かしなければいけないことがあるのでしょうか。
下記は、Web.configの一部です。(関係がありそうなところのみを抜き出しました。)

  <system.serviceModel>
    <behaviors>
      <endpointBehaviors>
        <behavior name="DaishinWCFAspNetAjaxBehavior">
          <enableWebScript />
        </behavior>
      </endpointBehaviors>
    </behaviors>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true"
      multipleSiteBindingsEnabled="true" />
    <services>
      <service name="Shop.DaishinWCF">

        <endpoint address="" behaviorConfiguration="DaishinWCFAspNetAjaxBehavior"
          binding="webHttpBinding" contract="Shop.DaishinWCF" />

      </service>
    </services>
  </system.serviceModel>

TESTWCF.svc.vbのView Code

Imports System.ServiceModel
Imports System.ServiceModel.Activation
Imports System.ServiceModel.Web
Imports System.Web.Providers.Entities
Imports System.Runtime.Serialization.Json
Imports System.ServiceModel.Description
Imports System.Runtime.Serialization
Imports Newtonsoft.Json

<ServiceContract()>
Public Interface IService1

    <OperationContract()> _
        <WebInvoke(Method:="GET", ResponseFormat:=WebMessageFormat.Json)> _
    Function fnVerifyID(ByVal ID As String, ByVal PASS As String)

End Interface
<DataContract()> _
Public Class csVerifyID
    Dim sID As String
    Dim iFlg As Integer
    Dim sName As String


    <DataMember()> _
    Public Property Name() As String
        Get
            Return sName
        End Get
        Set(value As String)
            sName = value
        End Set
    End Property

End Class

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


    <WebGet()>
    Public Function fnVerifyID(ByVal ID As String, ByVal PASS As String)

        Dim Hyouji As String = CStr(ID) & CStr(PASS)

        Dim objVeryfyID As New csVerifyID

        objVeryfyID.Name = "接続成功"

        Dim person As String = JsonConvert.SerializeObject(objVeryfyID)

        Return person

    End Function


End Class

TESTWCF.svc.vbのView Markup

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

Test.aspx

<%@ Page Title="" Language="vb" AutoEventWireup="false" MasterPageFile="~/Site.Mobile.Master" CodeBehind="Test.aspx.vb" Inherits="Shop.Daishin" %>

<asp:Content ID="Content3" ContentPlaceHolderID="MainContent" runat="server">

<head>
    <!DOCTYPE html> 
<title>テストタイトル</title>
<meta charset="utf-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no"/>
<link rel="stylesheet" href="http://code.jquery.com/mobile/1.1.0/jquery.mobile-1.1.0.min.css"/>
<link rel="stylesheet" href="css/custom.css"/>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js"></script>
    <%--<script src="http://code.jquery.com/jquery-1.10.2.min.js"></script>--%>
<script src="http://code.jquery.com/mobile/1.1.0/jquery.mobile-1.1.0.min.js"></script>
<script src="js/jCarousel.min.js" type="application/x-javascript" charset="utf-8"></script>
<script src="js/custom.js"></script>


    <script type="text/javascript">

    $(function () {

        $('#LogInMe').click(function () {


            var UserName = $('#txtUserName').val()
            var Password = $('#txtPassword').val() 
            var Para = { ID: $('#txtUserName').val(), PASS: $('#txtPassword').val() };

            $.ajax({
                url: '/TestWCF.svc/fnVerifyID', // ポスト先のURL
                type: 'GET',
                dataType: 'json', // HTTPメソッドの種類
                contentType: "application/json; charset=utf-8",

                traditional: true,
                data: Para ,

                success: function (response) {
                        var obj = JSON.parse(response.d);            
                        alert(obj.Name)
                }, 

                error: function (xhr, status, err) {
                    alert('Exeption:');

                } 
            });

        });
    });

</script>

</head>
<body>

  <div data-role="page" data-add-back-btn="true" id="p-listview-thumbnail" >

        <div data-role="header" data-position="fixed" data-theme="d">
           <h1></h1>
            <a href="#Family" data-icon="gear" class="ui-btn-right" data-iconpos="notext" data-theme="d" >Options</a>   
            <input type="text" id="txtUserName" placeholder="Username" />
            <input type="password" name="passwordinput" id="txtPassword"  placeholder="Password" value=""  />
            <a href="javascript:Authenticate();" id="LogInMe" data-role="button" data-icon="check" data-iconpos="right">Log Me In!</a>
             <label for="basic_name" id="lblMessage"></label>            
        </div>

</body>
</html>

</asp:Content>
お世話になります。
Microsoft Visual Studio 2013 Community Edhition のWebFormsで開発しております。
開発環境は、Windows8.1,IISのバージョンは8.5です。

1)デバッグ中には(開発サーバを用いると)、LogInMeボタンを押したとき「接続成功」と表示されます。しかし、IISに配置すると「Exeption」ということで失敗してしまいます。
2)IISに配置後、http://localhost/TEST/TEST.aspx”では期待通りページが表示されますが、http://localhost/TEST/TESTWCF.SVC では「エンドポイントが見つかりません」とブラウザに表示されます。

どの部分を修正したら良いでしょうか。あるいはIISの設定等で何かしなければいけないことがあるのでしょうか。
下記は、Web.configの一部です。(関係がありそうなところのみを抜き出しました。)
```config
  <system.serviceModel>
    <behaviors>
      <endpointBehaviors>
        <behavior name="DaishinWCFAspNetAjaxBehavior">
          <enableWebScript />
        </behavior>
      </endpointBehaviors>
    </behaviors>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true"
      multipleSiteBindingsEnabled="true" />
    <services>
      <service name="Shop.DaishinWCF">
 
        <endpoint address="" behaviorConfiguration="DaishinWCFAspNetAjaxBehavior"
          binding="webHttpBinding" contract="Shop.DaishinWCF" />
  
      </service>
    </services>
  </system.serviceModel>
```

TESTWCF.svc.vbのView Code
```html
Imports System.ServiceModel
Imports System.ServiceModel.Activation
Imports System.ServiceModel.Web
Imports System.Web.Providers.Entities
Imports System.Runtime.Serialization.Json
Imports System.ServiceModel.Description
Imports System.Runtime.Serialization
Imports Newtonsoft.Json

<ServiceContract()>
Public Interface IService1

    <OperationContract()> _
        <WebInvoke(Method:="GET", ResponseFormat:=WebMessageFormat.Json)> _
    Function fnVerifyID(ByVal ID As String, ByVal PASS As String)

End Interface
<DataContract()> _
Public Class csVerifyID
    Dim sID As String
    Dim iFlg As Integer
    Dim sName As String


    <DataMember()> _
    Public Property Name() As String
        Get
            Return sName
        End Get
        Set(value As String)
            sName = value
        End Set
    End Property

End Class

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


    <WebGet()>
    Public Function fnVerifyID(ByVal ID As String, ByVal PASS As String)

        Dim Hyouji As String = CStr(ID) & CStr(PASS)

        Dim objVeryfyID As New csVerifyID

        objVeryfyID.Name = "接続成功"

        Dim person As String = JsonConvert.SerializeObject(objVeryfyID)

        Return person

    End Function


End Class
```

TESTWCF.svc.vbのView Markup
```html
viceHost Language="VB" Debug="true" Service="Shop.DaishinWCF" CodeBehind="DaishinWCF.svc.vb" Factory="System.ServiceModel.Activation.WebServiceHostFactory"%>
```

Test.aspx
```html
<%@ Page Title="" Language="vb" AutoEventWireup="false" MasterPageFile="~/Site.Mobile.Master" CodeBehind="Test.aspx.vb" Inherits="Shop.Daishin" %>

<asp:Content ID="Content3" ContentPlaceHolderID="MainContent" runat="server">

<head>
    <!DOCTYPE html> 
<title>テストタイトル</title>
<meta charset="utf-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no"/>
<link rel="stylesheet" href="http://code.jquery.com/mobile/1.1.0/jquery.mobile-1.1.0.min.css"/>
<link rel="stylesheet" href="css/custom.css"/>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js"></script>
    <%--<script src="http://code.jquery.com/jquery-1.10.2.min.js"></script>--%>
<script src="http://code.jquery.com/mobile/1.1.0/jquery.mobile-1.1.0.min.js"></script>
<script src="js/jCarousel.min.js" type="application/x-javascript" charset="utf-8"></script>
<script src="js/custom.js"></script>


    <script type="text/javascript">

    $(function () {

        $('#LogInMe').click(function () {


            var UserName = $('#txtUserName').val()
            var Password = $('#txtPassword').val() 
            var Para = { ID: $('#txtUserName').val(), PASS: $('#txtPassword').val() };

            $.ajax({
                url: '/TestWCF.svc/fnVerifyID', // ポスト先のURL
                type: 'GET',
                dataType: 'json', // HTTPメソッドの種類
                contentType: "application/json; charset=utf-8",
                
                traditional: true,
                data: Para ,

                success: function (response) {
                        var obj = JSON.parse(response.d);            
                        alert(obj.Name)
                }, 

                error: function (xhr, status, err) {
                    alert('Exeption:');
       
                } 
            });
 
        });
    });

</script>

</head>
<body>

  <div data-role="page" data-add-back-btn="true" id="p-listview-thumbnail" >
   
        <div data-role="header" data-position="fixed" data-theme="d">
           <h1></h1>
            <a href="#Family" data-icon="gear" class="ui-btn-right" data-iconpos="notext" data-theme="d" >Options</a>   
            <input type="text" id="txtUserName" placeholder="Username" />
            <input type="password" name="passwordinput" id="txtPassword"  placeholder="Password" value=""  />
            <a href="javascript:Authenticate();" id="LogInMe" data-role="button" data-icon="check" data-iconpos="right">Log Me In!</a>
             <label for="basic_name" id="lblMessage"></label>            
        </div>
    
</body>
</html>

</asp:Content>
```