1

私は、prefixTextの「h」とcountの3で機能し、配列で「hi」と「hello」を返すオートコンプリートエクステンダー用のこのサービスを持っています。

[System.Web.Services.WebMethod]
    [System.Web.Script.Services.ScriptMethod]
    public string[] GetWebUploadAutoCompleteData(string prefixText, int count)
    {
        try
        {
            DAL.DAL dal = new DAL.DAL();
            string[] returnValues = dal.GetWebUploadAutoCompleteData(prefixText, count);
            return returnValues;
        }
        catch (Exception ex)
        {
            throw new Exception(ex.Message);
        }
    }

サービスクラスの最初の行:

...
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.Web.Script.Services.ScriptService]
public class BLL : System.Web.Services.WebService
{
...

これがUIです。

<asp:TextBox ID="txtTest" runat="server" Width="250px"></asp:TextBox>
                <cc1:AutoCompleteExtender ID="aceTest" runat="server" CompletionSetCount="3" DelimiterCharacters=";, :"
                    ServicePath="http://localhost:7051/UploadServices/BLL.asmx" MinimumPrefixLength="2" 
                    Enabled="true" ServiceMethod="GetWebUploadAutoCompleteData" TargetControlID="txtTest">
                </cc1:AutoCompleteExtender>

すべてが正しいですが、機能していません。助けてください。

4

1 に答える 1

0

WebサービスとUIは別々のプロジェクトであるため、クライアントコードをホストするページとは異なるドメインにあるサービスを呼び出すことはできません。これはセキュリティ機能であり、悪意のあるコードが無害なJavaScriptをワールドワイドウェブ上の厄介なものにリダイレクトするのを防ぎます。

解決

外部Webサービスにアクセスするには、UIプロジェクトに3番目のWebサービスプロキシを構築します。3番目のサービスはサーバー側から外部Webサービスにアクセスでき、クライアントからこの内部Webサービスにアクセスできます。

ご不明な点がございましたら、お気軽にお問い合わせください。

編集

プロジェクトでプロキシサービスを作成した場合もう1つ実行し、ページに次のコードを追加します

<asp:ScriptManager ID="ScriptManager1" runat="server">

            <Services>

                <asp:ServiceReference Path="AutoComplete.asmx" />

            </Services>

        </asp:ScriptManager>
于 2011-05-04T08:26:49.333 に答える