alidehban
چهارشنبه 23 بهمن 1392, 11:46 صبح
دررود بر تمام دوستان برنامه نویس....
شرح ماجرا :
من یک وب سرویس رو با دلفی از نوع (ISAPI) نوشتم و روی وب سرور ویندوز publish کردیم و داره روی valid ip بدون هیچ مشکلی کار میکنه...حالا به دلیل تغییرات شبکه ی سازمان یک پراکسی سرور جلوی درگاه سازمان قرار گرفته و با NATING و اینجورچیزا درخواست های مارو اگه رو پورت مثلا 4040 باشه رد میکنن رو همون وب سرور قدیم...
مشکل این هست که توی browser لینکش رو (با پورت جدید) بزنی xml وب سرویس باز میشه ، حتی با importer دلفی هم میشناسه و ایمپورت میکنه اما هیچ متدی invoke نمیشه و تو پیغام خطاش هم پورت رو نشون نمیده...درواقع میره رو پروکسی سرور که مسلماً خطای 404 و...
لازم به ذکر است که پورت رو هم رو URL و هم تو پراپرتیه port شئ HTTPRIO در کلاینت تست زدم و فایروال هم روی وب سرور off هست سمت کلاینت...
کیست که مرا یاری کند؟
نمونه کد ساخته شده با ایمپورتر:
function GetIWs_Tajmie(UseWSDL: Boolean; Addr: string; HTTPRIO: THTTPRIO): IWs_Tajmie;
const
defWSDL = 'http://ip:4040/WS/WebService_Tajmie.dll/wsdl/IWs_Tajmie';
defURL = 'http://ip:4040/WS/WebService_Tajmie.dll/wsdl/IWs_Tajmie';
defSvc = 'IWs_Tajmieservice';
defPrt = '4040';
var
RIO: THTTPRIO;
begin
Result := nil;
if (Addr = '') then
begin
if UseWSDL then
Addr := defWSDL
else
Addr := defURL;
end;
if HTTPRIO = nil then
RIO := THTTPRIO.Create(nil)
else
RIO := HTTPRIO;
try
Result := (RIO as IWs_Tajmie);
if UseWSDL then
begin
RIO.WSDLLocation := Addr;
RIO.Service := defSvc;
RIO.Port := '4040'; // این بخش رو خودم وارد کردم
end else
RIO.URL := Addr;
finally
if (Result = nil) and (HTTPRIO = nil) then
RIO.Free;
end;
end;
نمونه فراخوانی متد ها بطور مثال :
procedure TForm1.btn1Click(Sender: TObject);
var a:Integer;
begin
a:=GetIWs_Tajmie(true).GetServerUnixTime;
ShowMessage( IntToStr(a) );
end;
نه میخوام بدونم چرا بدون پورت جواب میده و با پورت نه؟!!!
شرح ماجرا :
من یک وب سرویس رو با دلفی از نوع (ISAPI) نوشتم و روی وب سرور ویندوز publish کردیم و داره روی valid ip بدون هیچ مشکلی کار میکنه...حالا به دلیل تغییرات شبکه ی سازمان یک پراکسی سرور جلوی درگاه سازمان قرار گرفته و با NATING و اینجورچیزا درخواست های مارو اگه رو پورت مثلا 4040 باشه رد میکنن رو همون وب سرور قدیم...
مشکل این هست که توی browser لینکش رو (با پورت جدید) بزنی xml وب سرویس باز میشه ، حتی با importer دلفی هم میشناسه و ایمپورت میکنه اما هیچ متدی invoke نمیشه و تو پیغام خطاش هم پورت رو نشون نمیده...درواقع میره رو پروکسی سرور که مسلماً خطای 404 و...
لازم به ذکر است که پورت رو هم رو URL و هم تو پراپرتیه port شئ HTTPRIO در کلاینت تست زدم و فایروال هم روی وب سرور off هست سمت کلاینت...
کیست که مرا یاری کند؟
نمونه کد ساخته شده با ایمپورتر:
function GetIWs_Tajmie(UseWSDL: Boolean; Addr: string; HTTPRIO: THTTPRIO): IWs_Tajmie;
const
defWSDL = 'http://ip:4040/WS/WebService_Tajmie.dll/wsdl/IWs_Tajmie';
defURL = 'http://ip:4040/WS/WebService_Tajmie.dll/wsdl/IWs_Tajmie';
defSvc = 'IWs_Tajmieservice';
defPrt = '4040';
var
RIO: THTTPRIO;
begin
Result := nil;
if (Addr = '') then
begin
if UseWSDL then
Addr := defWSDL
else
Addr := defURL;
end;
if HTTPRIO = nil then
RIO := THTTPRIO.Create(nil)
else
RIO := HTTPRIO;
try
Result := (RIO as IWs_Tajmie);
if UseWSDL then
begin
RIO.WSDLLocation := Addr;
RIO.Service := defSvc;
RIO.Port := '4040'; // این بخش رو خودم وارد کردم
end else
RIO.URL := Addr;
finally
if (Result = nil) and (HTTPRIO = nil) then
RIO.Free;
end;
end;
نمونه فراخوانی متد ها بطور مثال :
procedure TForm1.btn1Click(Sender: TObject);
var a:Integer;
begin
a:=GetIWs_Tajmie(true).GetServerUnixTime;
ShowMessage( IntToStr(a) );
end;
نه میخوام بدونم چرا بدون پورت جواب میده و با پورت نه؟!!!