سؤال

لقد قمت بكتابة خدمة ويب .NET ليستخدمها العميل خارج نطاق سيطرتي (الخادم الخاص بي عبارة عن محاكي لخادم مباشر مكتوب بلغة PHP).تعمل خدمة الويب حسب الرغبة ولكن ليس لدى العميل القدرة على إضافة الامتداد .asmx، أو أي امتداد لهذا الشأن، في مكالماته.يستخدمون بشكل أساسي http://localhost/soap/MyWebService بينما تتوقع IIS http://localhost/soap/MyWebService.asmx.هل هناك أي طريقة لجعل IIS يستجيب للطلبات بدون الملحق .asmx؟

هل كانت مفيدة؟

المحلول

وإضافة تعيين البدل، والتي سوف توجيه جميع الطلبات عن طريق ASP.NET:

HTTP: //professionalaspnet.com/archive/2007/07/27/Configure-IIS-for-Wildcard-Extensions-in-ASP.NET.aspx

وستحتاج أيضا إلى القيام ببعض إعادة كتابة URL، للسماح للطلب الوارد http://localhost/soap/MyWebService لتعيين http://localhost/soap/MyWebService.asmx.

http://weblogs.asp.net/scottgu/archive/2007/02/26/tip-trick-url-rewriting-with-asp-net.aspx

وفي الأساس، هل يمكن أن تضيف شيئا مثل ما يلي لطريقة Application_BeginRequest الخاص بك:

string path = Request.Path;
if (path.Contains("/soap/") && !path.EndsWith(".asmx"))
    Context.RewritePath(path + ".asmx");

وأنا لم نجرب ذلك (وانها HACK) ولكن يجب أن تبدأ بها.

نصائح أخرى

هل يمكن أيضا وضعه في دليل في حد ذاته، ثم في IIS تعيينه مستند افتراضي.

في الخادم: C: /mywebsite.com/mywebservice/mywebservice.asmx

في وضع IIS mywebservice.asmx كوثيقة الافتراضي

وعلى شبكة الإنترنت: http://mywebsite.com/mywebservice

يبدو لي أن هناك خطأ ما في عميل PHP.ولا ينبغي لهم تفسير عنوان URL الخاص بالخدمة بأي شكل من الأشكال.أيًا كان عنوان URL المحدد في بيانات تعريف الخادم أو تكوين العميل، فهو عنوان URL الذي يجب استخدامه.

لا أعرف PHP، ولكن هل يمكن لأحد أن يخبرني لماذا من المنطقي أن تهتم PHP بعدد النقاط الموجودة في عنوان URL؟لا أستطيع أن أرى أنه من المهم لأي عميل ما إذا كانت خدمتي متاحة أم لا http://localhost/foo/bar أو "http://localhost/foo/b.a.r.asmx?PHP=0".

في فب لديك لاستدعاء اختصار فقط، لا تحتاج إلى asxm أو هذا النوع من الأشياء الغبية التي صافي القيام به.

واحد مثال بسيط

$wsdl = "http://domain/wsdlfile.wsdl"; //url to wsdl 
$client = new SoapClient($wsdl,array('trace' => 1,'encoding' => 'UTF-8','exceptions' => 0)); 
$Return = $client->callfunction();
echo htmlspecialchars($client->__getLastResponse());

وهذا كل شيء.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top