問題タブ [scriptservice]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
asp.net - ASP.NET ScriptService JavaScript エイリアス
これは、実際の「問題」ではなく、表面的な問題です。代わりに、多くの PageMethods を WebService 呼び出しに変換するソリューションがあります。一部の PageMethods は数百キロバイトのページ オーバーヘッドを作成したため、それらを独自の WebServices に抽出して、ページ オーバーヘッドを削減し、JavaScript プロキシのクライアント側キャッシュを有効にすると考えました。
ただし、プロジェクトは多くの名前空間で構成されています。CompanyName.Website.Services.MyService.ServiceMethod
これは文字通り、同じ名前空間の JavaScript に変換されます。ほとんどの場合、これは非常に便利ですが、サービスに約 20 個のメソッドがある場合は、常に同じ名前空間を作成するため、非常に面倒になります。
少し調べたところ、自分のエイリアスを次のように書けることがわかりました
var MyAlias = function() { CompanyName.Website.Service.MyService; }
ただし、これを行うと、Visual Studio 2010 は IntelliSense を提供できなくなります。期待どおりに機能しますが、私が大好きになった甘い、甘いインテリセンスを使用することはできません:)
だから、私の質問はこれです: 生成されたプロキシにエイリアスを提供する方法はありますか (カスタムタイプでできるように)?
[System.Web.Script.Services.GenerateScriptType(typeof(MyService), ScriptTypeId = "MyServiceAlias")]
ある種のエイリアスを作成する属性を使用してみましたが、それがどのような影響を与えるかを実際には理解できませんでした。さらに、WebService クラスのような静的な型に使用することは想定されていないと思います。
私の要件は、生成されたプロキシの名前空間を WebServices に元の名前を保持しながら短縮できることですが、それでも IntelliSense を使用できるようにすることです。
前もって感謝します...
c# - 派生型でのASP.NETScriptServiceの逆シリアル化の問題
ScriptService
抽象基本型の単一のパラメーターを受け取るWebメソッド(.NET 3.5)があります。
と:
通常、メソッドが呼び出されると、item
は、および/またはオブジェクトGroup
を含むになります。このサービスをjQueryから呼び出しています。Microsoftのクライアント側フレームワークを使用していません。他のメソッドの呼び出しは正常に機能します。Instance
Group
問題: 呼び出しを行うと、メソッドが呼び出される前に例外がスローされます。たとえば、私の呼び出しが次の場合:
...私は:を取得しInvalidOperationException
ます
__type
JSONオブジェクトのメンバーを削除するか、に変更するとNamespace.Item
(そして、abstract
から修飾子を削除するとItem
)、例外はなくなりますが、結果として得られる逆シリアル化されたオブジェクトは明らかに役に立たないものです。
私は何が欠けていますか?
asp.net - ASP.NET ScriptService へのクロスドメイン要求を許可する
[ScriptService] 属性を使用して、ASP.NET Web サービスを実行しています。この記事から読んだことから:
デフォルトでは、ASP.NET は JSONP リクエストを許可しません (クロスドメイン リクエストを拒否するために DOM に挿入されます)。これは、次の 2 つの方法で行います。
1) POST リクエストのみを受け入れる (常に GET を介したスクリプト インジェクション) 2) "Content-type: application/json" 以外の HTTP ヘッダー Content-type を送信する接続を拒否する (ブラウザは送信しません)。
私はクロスドメインの問題に精通しており、JSONP が何であるかを知っており、ASP.NET がデフォルトでそのように制限されている理由を完全に理解しています。
しかし今、私は自分の Web サービスを公開しており、誰にでも公開する必要があります。そのため、Javascript を介して Web サービスへのクロスドメイン要求を明示的に有効にする必要があります。これにより、外部 Web サイトが jquery などから Web サービスを介してデータを取得できるようになります。
[ScriptMethod(UseHttpGet=true)] のように ScriptMethod 属性を変更して、GET 経由のリクエストを許可する手順 (1) については既に説明しました。jQuery で確認したところ、GET リクエストが機能するようになりました (同じドメインで)。しかし、修正点 (2) にたどり着くにはどうすればよいでしょうか。
一部のブラウザーがサポートする Allow-Origin-* ヘッダーについては知っていますが、まだ標準ではありません。ユーザーや顧客に、Web サービスを使用するために HTTP ヘッダーを変更するよう強制したくありません。
要約すると、JSON を介してパブリック Web サービスの ScriptingService のクロスドメイン リクエストを有効にするための適切な方法が必要です。つまり、Web サービスを公開する方法がなければならないということです。それが、ほとんどの Web サービスの目的です。
asp.net - ASP.NET WebForms Routingを取得して.asmxJSON呼び出しを適切にルーティングするにはどうすればよいですか?
従来のASP.NETWebFormsアプリにマルチテナンシーを実装しようとしています。次のように、URLに適切なクライアントを示す必要があります。
ただし、.asmxを正しくルーティングするように取得できません。このルーティングルールは、すべての着信URLを適切に取得します。
しかし、.asmx呼び出しの処理に問題があります。これが私のIRouteHandlerです。私が得るエラーは次のとおりです。
JSONであるはずですが、何らかの理由で機能していません。コンテンツタイプを設定しています-ルーティングせずにこれとまったく同じリクエストを送信すると、正常に機能します。
関連リンク:
web-services - WebService/ScriptService が見つかりません。System.Web.Extensions が認識されない
クライアント側から呼び出したいので、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 の内容は次のとおりです。
マスター ページのスニペット:
そして私のページの上部に私はjsをインポートします:
PageRequestManager.js:
私のweb.configは混乱していますが、喜んで投稿します...
.net - POST と GET を使用する場合の .NET ScriptService のシリアル化の違いは?
クライアント側 (JS) から [ScripService] のメソッドを呼び出しています。POST を使用して電話をかけると、すべて正常に動作します。しかし、GET を使用すると、このエラーがスローされます。
型を反映するエラーが発生しました ... 型 System.Collections.Generic.IList`1[[System.String, mscorlib, Version=4.0.0.0, Culture=neutral] のメンバー xxx をシリアル化できません。これはインターフェイスであるためです。
フィドラーを使用して同じ POST リクエストを送信しましたが、これは機能します。次に、(フィドラーで) GET を使用するように要求を編集しました。他のすべては同じです。以前と同じエラーが発生します。
なぜこれが起こるのですか?実行時のメンバ xxx は具象型で、リクエストが POST の場合は OK をシリアライズします。私は何が欠けていますか?
jquery - スクリプトサービスは、HttpContext.RewritePath()を使用すると、VS開発サーバーで405を返しますか?
非常に具体的な問題に直面しているようです。質問が長かったことをお詫びします。
に物理的に常駐するスクリプトサービスがあります/somepath/service.asmx
。URL書き換えモジュール(UrlRewritingNet v2.0)を使用し/service.asmx
て、物理的な場所からの通話を書き換えています。このモジュールは.NetのHttpContext.RewritePath()
機能を使用します。
私のサービスはメソッドを公開dosomething
し、私のページにはスクリプト呼び出しがあります:
このコードをIISで実行すると、ステータスコード200
が返されますが、VS開発サーバーでこのコードを実行すると、が返されます405 Method Not Allowed
。スタックトレースからのエラーメッセージは次のとおりです。
このメッセージでは、パスが正しくルーティングされているように見えることに注意してください。
/somepath/service.asmx/dosomething
興味深いのは、ajax呼び出しを完全なURLに変更すると、IISとVS開発サーバーの両方が正常に機能するため、これがルーティングの問題であるとほぼ確信しています。
その405を回避する方法はありますか?
c# - JSON 応答に「d」が含まれなくなりました!!! asp.net 4.5
質問があります。この間に asp.net 3.5 を asp.net 4.5 に変換しています。多くの問題がありましたが、最終的に負荷がかかりすぎて、サービスからの JSON 応答で奇妙な動作が発生しています。 「d」はもう含まれていません。
雪が降る
コールバックのJavaScriptコードを壊すのはどれですか? または説明
asp.net - ASP.NET ScriptService への予期しない GET メソッド呼び出し
当社のエラー ロガーは、次のエラーを定期的に検出しています。
System.InvalidOperationException: '/TheMethodName' で終わる予期しない URL の要求形式が認識されない
このエラーがスローされる理由は、スクリプト サービスへの要求が GET メソッドを使用しており、既定のセキュリティ設定では POST 要求のみが許可されているためです。
奇妙な点は、この特定のサービス メソッドを呼び出しているコード内の唯一の場所が$.ajax
呼び出しであり、具体的には を使用していることですtype: 'POST'
。このサービスに対して GET 要求が行われるアプリ内の他の場所はありません。
UI は 20 秒ごとに POST 呼び出しを行ってデータを取得していますが、GET がそれを妨げているようには見えません。GET は無関係なだけです。IIS のログを調べたところ、適切な POST 要求と、場合によっては GET 要求を確認できます。
追加の問題として、追加の GET 呼び出しを取得しているのはこの Web サービスだけではありません。これらの呼び出しは、他のいくつかのサービス エンドポイントにも記録されています。
私の推測では、ブラウザーまたはプロキシ サーバーまたは何かが独自にこれらの呼び出しを行っていると思われます (プリフェッチまたは何らかのキャッシュの一部として) が、その証拠はありません。不正なリクエストのユーザー エージェントを調べると、さまざまなブラウザから送信されています。
他の誰かがこれを前に見たことがありますか、それとも何が原因なのか考えていますか?