0

クライアント側から呼び出したいので、vb.net 4.0 Web アプリ (または Web サイト... どれかわからない - 重要ですか?) で scriptservice を作成しました。名前空間が認識されないというクライアント エラーが発生します (以下のコードの HomepageService)。プロジェクトで「ルート名前空間」として構成された名前で修飾しようとしましたが、jsはその名前空間も認識しないと言います。

このアプリは古いものです。最近 dotnet 2.1 から 4.0 に変換しました。

HomepageServices.asmx.vb で System.Web.Extensions をインポートしようとすると、Visual Studio は、参照の下のスタジオにリストされているにもかかわらず、それを認識しないと言っているため、次の関連トピックを見つけました。 .

[System.Web.Extensions アセンブリを解決できません][1]

そのトピックにフォローアップの質問を投稿しようとしましたが、回答の指示に従ってみましたがうまくいきませんでした (プロジェクト > プロパティ > アプリケーションに「ターゲット フレームワーク」がありません)。フォローアップの質問をすることは許可されていないと思いますか?

さまざまなサイトを調べて指示に従いました。例を次に示します 。 http://www.asp.net/ajax/documentation/live/tutorials/ConsumingWebServicesWithAJAXTutorial.aspx

私のサイトのルートフォルダーにある HomepageService.asmx の内容は次のとおりです。

Imports System.Web.Services
Imports System.Web.Services.Protocols
Imports System.ComponentModel
Imports System.Collections.Generic


<System.Web.Services.WebService(Namespace:="http://localhost/appname")> _
<System.Web.Services.WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1)> _
<ToolboxItem(False)> _
<System.Web.Script.Services.ScriptService()> _
Public Class HomepageService
    Inherits System.Web.Services.WebService

    Shared _rand As Random = New Random(Environment.TickCount)

    <WebMethod()> _
    Public Function Test(ByVal s As String) As Integer
        Return _rand.Next(0, 120)

    End Function


End Class

マスター ページのスニペット:

<body>
<form id="form1" runat="server">

    <asp:ScriptManager ID="Scriptmanager1" runat="server" EnablePageMethods="true">
        <Scripts>
            <asp:ScriptReference Path="CallWebServiceMethods.js" />
        </Scripts>

        <Services>
            <asp:ServiceReference Path="HomepageService.asmx" />
        </Services>
    </asp:ScriptManager>

そして私のページの上部に私はjsをインポートします:

PageRequestManager.js:

HomepageService.set_defaultSucceededCallback(
                 OnLookupComplete);
HomepageService.set_defaultFailedCallback(
                 OnError);
function OnLookup() {
    HomepageService.Test(stb.value);
}
function OnLookupComplete(result, userContext) {
    // userContext contains symbol passed into method
    var res = document.getElementById("_resultLabel");
    res.innerHTML = userContext + " : <b>" + result + "</b>";
}
function OnError(result) {
    alert("Error: " + result.get_message());
}

私のweb.configは混乱していますが、喜んで投稿します...

4

1 に答える 1

0

最後にそれが機能しました。これが私がやった方法です。問題が何であったかはわかりません..しかし、以下のプロセスに従うとうまくいきました。

ステップ 1.新しい Web サイト プロジェクトを使用して、http://msdn.microsoft.com/en-us/library/bb532367 (v=vs.90).aspx のチュートリアルに従います。
できます。これをモデル プロジェクトと呼びます。

ステップ 2. 既存の Web アプリでファイルを作成し、モデル プロジェクトからすべてのコードをコピーします。これはモデル プロジェクトとは異なります。そのプロジェクトで Web サービスを作成したときに、ルート フォルダーに .asmx が配置されましたが、.asmx.vb が App_Code フォルダーに貼り付けられたからです。手動で移動する必要があるのか​​ わかりませんか?過去に、この Web アプリで App_Code または App_data フォルダーを使用しようとしたとき、すべてがうまくいきませんでした...

ステップ 3. Web サービスを編集して、Web サイトではなく Web アプリで動作するようにします。名前。

これは、Web アプリのルート フォルダーにある HelloWorld.asmx.vb の結果のコードです。

Imports System
Imports System.Web
Imports System.Collections
Imports System.Web.Services
Imports System.Web.Services.Protocols

'Namespace Samples.Aspnet
<WebService([Namespace]:="http://mycompany.org/"), _
WebServiceBinding(ConformsTo:=WsiProfiles.BasicProfile1_1), _
System.Web.Script.Services.ScriptService()> _
Public Class HelloWorld
    Inherits System.Web.Services.WebService

    Public Sub New()

    End Sub 'New


    'Uncomment the following line if using designed components 
    'InitializeComponent(); 

    <WebMethod()> _
    Public Function Greetings() As String
        Dim serverTime As String = _
            String.Format("Current date and time: {0}.", DateTime.Now)
        Dim greet As String = "Hello World. <br/>" + serverTime
        Return greet

    End Function 'Greetings
End Class 'HelloWorld

'End Namespace

そして、これもルート フォルダーにある HelloWorld.asmx のコードです。

<%@ WebService Language="vb" CodeBehind="HelloWorld.asmx.vb" Class="Fubar.HelloWorld" %>

ステップ 4. js "HelloWorld.js" を作成し、モデル プロジェクトと同じようにルート フォルダーに貼り付け、モデル プロジェクトからコードを貼り付けます。アプリの名前空間に一致するように 1 つの編集を行います。結果のコードは次のとおりです。

var helloWorldProxy;

// Initializes global and proxy default variables.
function pageLoad() {
    // Instantiate the service proxy.
  //  helloWorldProxy = new Samples.Aspnet.HelloWorld();
    helloWorldProxy = new Fubar.HelloWorld();
    // Set the default call back functions.
    helloWorldProxy.set_defaultSucceededCallback(SucceededCallback);
    helloWorldProxy.set_defaultFailedCallback(FailedCallback);
}


// Processes the button click and calls
// the service Greetings method.  
function OnClickGreetings() {
    var greetings = helloWorldProxy.Greetings();
}

// Callback function that
// processes the service return value.
function SucceededCallback(result) {
    var RsltElem = document.getElementById("Results");
    RsltElem.innerHTML = result;
}

// Callback function invoked when a call to 
// the  service methods fails.
function FailedCallback(error, userContext, methodName) {
    if (error !== null) {
        var RsltElem = document.getElementById("Results");

        RsltElem.innerHTML = "An error occurred: " +
            error.get_message();
    }
}

if (typeof (Sys) !== "undefined") Sys.Application.notifyScriptLoaded();

ステップ 5. マスター ページの ScriptManager タグにコードを追加します。これは、Default.aspx のモデル プロジェクトのコードに対応します。以下の ScriptManager タグは、モデル プロジェクトのものと同じです。

<body>
    <form id="form1" runat="server">

        <asp:ScriptManager runat="server" ID="ScriptManager">
            <Services>
                <asp:ServiceReference path="~/HelloWorld.asmx" />
            </Services>
            <Scripts>
                <asp:ScriptReference Path="~/HelloWorld.js" />
            </Scripts>
        </asp:ScriptManager>

ステップ 5. モデル プロジェクトの Default.aspx にあるように、テスト ページにコントロールを追加します。

   <div id="divTestWebServices">

         <button id="Button1" onclick="OnClickGreetings(); return false;">Greetings</button>
         <div>
            <span id="Results"></span>
        </div>   
    </div>

ステップ 6. Fubar を実行してテスト ページに移動し、ボタンをクリックします。

できます!!!なぜ以前はうまくいかなかったのかわかりませんが、これで 3 日経った今、次に進む準備ができています...

于 2012-01-27T15:36:05.463 に答える