2016-07-28 5 views
1

Я использую VisualStudio2013. Его важно отметить для читателей, что код, который этот asmx получен из работы отлично, но я не знаю, как использовать asmx WebService. Я загрузил все девять ярдов отсюда https://sourceforge.net/projects/shorturl-dotnet/C# Как получить/установить данные из веб-службы asmx

Я не могу понять, как получить/установить свойства следующего CreateUrl() WebMethod. Я хочу узнать, как использовать весь WebService, но начал здесь.

В следующем примере я отправляю URL-адрес метода CreateURL(), который сокращает URL-адрес и выполняет другие задачи; Я не знаю, как получить свойства из возвращаемого класса ShortUrl.Container: у меня не было успешного доступа к данным после того, как класс (ы) возвращен моему методу вызова.

// WebMethod

public class API : System.Web.Services.WebService { 

[WebMethod] 
public ShortUrl.Container CreateUrl(string real_url) 
{ 
    ShortUrl.Container oShortUrl = new ShortUrl.Container(); 

    oShortUrl.RealUrl = real_url; 
    oShortUrl.ShortenedUrl = ShortUrl.Utils.UniqueShortUrl(); 
    oShortUrl.CreateDate = DateTime.Now; 
    oShortUrl.CreatedBy = HttpContext.Current.Request.UserHostAddress; 

    ShortUrl.Utils.AddUrlToDatabase(oShortUrl); 

    oShortUrl.ShortenedUrl = ShortUrl.Utils.PublicShortUrl(oShortUrl.ShortenedUrl); 

    return oShortUrl; 
    } 
} 

// класс ShortUrl.Container возвращается как oShortUrl

namespace ShortUrl 
{ 
    /// <summary> 
    /// Container for the ShortURL object 
    /// </summary> 
    public class Container 
    { 
     private string _real_url; 
     private string _short_url; 
     private DateTime _create_date; 
     private string _created_by; 

     public Container() 
     { 
      this.CreateDate = DateTime.Now; 
      this.CreatedBy = "tap"; 
      this.RealUrl = null; 
      this.ShortenedUrl = "Unknown"; 
     } 

     public string RealUrl 
     { 
      get { return _real_url; } 
      set { _real_url = value; } 
     } 

     public string ShortenedUrl 
     { 
      get { return _short_url; } 
      set { _short_url = value; } 
     } 

     public DateTime CreateDate 
     { 
      get { return _create_date; } 
      set { _create_date = value; } 
     } 

     public string CreatedBy 
     { 
      get { return _created_by; } 
      set { _created_by = value; } 
     } 
    } 
} 

В VS2013 я добавляю ссылки на службу, чтобы указать на http://tap.tools.api.asmx в качестве конечной точки службы и имя ссылки VS2013 как ShortenUrl. VS2013 генерирует классы APISoapClient и Container.

// get/set properties of the ShortUrl.Container class 
// by means of APISoapClient 
ShortenUrl.APISoapClient u = new ShortenUrl.APISoapClient(); 
u.CreateUrl("http://clintongallagher.com/tag-target-url.html"); 


// get/set properties of the ShortUrl.Container class 
// by means of Container class 
ShortenUrl.Container c = new ShortenUrl.Container(); 
string url = c.RealUrl; 

Я не получаю нигде либо, и я думаю, что моя проблема заключается в экземпляре объекта oShortUrl реализованного в рамках метода общественного ShortUrl.Container CreateUrl (строка real_url). Я не знаю, как получить какие-либо свойства из этого экземпляра oShortUrl, класс Container возвращается к моим методам.

// oShortUrl 
ShortUrl.Container oShortUrl = new ShortUrl.Container(); 

Как ни странно это может звучать, как старые и устаревшие использование ASMX, случается, я никогда не работал с -Любые- WebServices пока что объясняет, почему я слаб и брошусь на милость суда.

// EDIT: 2016-07-19 ~ 2: 41pm

VS2013 генерируется несколько классов из WSDL два из которых кажутся полезными, как показано в Intellisense ...

// класс APISoapClient и класс Container

Когда я использую локальную переменную с APISoapClient, сокращенный URL-адрес генерируется, как я могу видеть, используя SQL Management Studio и отмечаю, что все данные правильно сгенерированы, но я не могу получить/установить на другие WebMethods или свойства для получения/установки данных ...

// Exposes two WebMethods: CreateUrl and GetUrl  
ShortenUrl.APISoapClient u = new ShortenUrl.APISoapClient(); 

// Does generate the shortened URL 
u.CreateUrl("http://clintongallagher.com/tag-target-url.html"); 
// Should return the URL that was shortened but doesn't 
u.GetUrl("i2Z5H"); 

И ...

// Exposes the properties in Intellisense but does not return data 
ShortenUrl.Container c = new ShortenUrl.Container(); 

// returns 1/1/0001 12:00:00 AM 
lblCreateDate.Text = "CreateDate: " + c.CreateDate.ToString(); 
// returns nothing 
lblCreatedBy.Text = "CreatedBy: " + c.CreatedBy; 
// returns nothing 
lblRealUrl.Text = "RealUrl: " + c.RealUrl; 
// returns ShortenUrl.Container 
lblShortenedUrl.Text = "ShortenedUrl: " + u.GetUrl("i2Z5H"); 
+1

, если вы добавили ссылку на обслуживание, могли ли вы отображать WSDL? – yopez83

+0

Hey yopez Я уверен, что сделал и могу прочитать wsdl. VS2013 генерирует Reference.svcmap, который отображает api.disco, api.wsdl, configuration.svcinfo и еще один экземпляр, который я только что наблюдал с именем configuration91.svcinfo, все из которых читаются в редакторе. – ClintonGallagher

+0

Вам не нужно писать весь код здесь, просто укажите свой подход к преодолению вашей проблемы и вставьте код, в котором вы столкнулись с проблемами. – ABi

ответ

1

Если я понял, что вы пытаетесь получить это контейнер возвращается из веб-метода. Если это так, просто создайте тип контейнера переменной и назначьте ему вызов метода. Например ShortUrl.Container c = u.CreateUrl(...), то от c вы можете получить значения, которые вы ищете.

+0

Да, я тоже так думал, но это не дает ожидаемых результатов. Обратитесь к моему первоначальному вопросу EDIT: 2016-07-19 ~ 2: 41pm – ClintonGallagher

+0

Вы заработали? Если да, пожалуйста, было бы здорово проверить этот вопрос, как было сказано. Спасибо – yopez83

+0

Мое извинение yopez и спасибо, я начал работать с вашим комментарием, но каким-то образом мой ИБП сдул w/7mos, оставленный на батарее, поэтому я работал, чтобы ответить, чтобы защитить свои активы. Я отмечаю ваши комментарии в качестве ответа и могу вернуться к этой проблеме, если не потеряю машину ... – ClintonGallagher

1

Подумайте об этом @clintongallagher.Когда вы сделаете следующий вызов,

ShortenUrl.APISoapClient u = new ShortenUrl.APISoapClient(); 
u.CreateUrl("http://clintongallagher.com/tag-target-url.html"); 


[WebMethod] 
public ShortUrl.Container CreateUrl(string real_url) 
{ 
    ShortUrl.Container oShortUrl = new ShortUrl.Container(); 

    oShortUrl.RealUrl = real_url; 

    //here you're assigning a value to this object, let's say 'A' 
    oShortUrl.ShortenedUrl = ShortUrl.Utils.UniqueShortUrl(); 

    oShortUrl.CreateDate = DateTime.Now; 
    oShortUrl.CreatedBy = HttpContext.Current.Request.UserHostAddress; 

    //then here you're saving the object with the Shortened value 'A' you just got 
    ShortUrl.Utils.AddUrlToDatabase(oShortUrl); 

    /* 
    *finally you're replacing the Shortened value with another value, 
    *let's say 'B', which is the object you're going to return*/ 
    oShortUrl.ShortenedUrl = ShortUrl.Utils.PublicShortUrl(oShortUrl.ShortenedUrl); 

    return oShortUrl; 
} 

Я не знаю, как это GetUrl(shortened_value) должен работать, но, предполагая, что он получит от Д.Б. shortened_value прошел в, конечно, результат не будет таким же, так как укороченное сохраненное значение было «A», и вы просили B.

+0

Вы получили его для работы Клинтона? – yopez83

 Смежные вопросы

  • Нет связанных вопросов^_^