none
WEB служба возвращает null RRS feed

  • Вопрос

  • Здравствуйте!

    Вопрос в следующем:

    Есть веб-служба, у нее один метод, который возвращает "Hello, world!". Когда заходим с локальной машины и в браузере передаем туда параметры, все отлично возвращается, но стоит только с удаленной машины вызвать данный метод, он возвращает null. Вот еще: такое было не всегда, и до опр. момента все работало отлично (естественно, не Hello, world, а другое, но когда перестала работать данная служба, в самом начале метода поставили return "Hello, world";)


    Regards, Matyushov Anton.
    21 сентября 2011 г. 14:34

Ответы

  • Перегенерите прокси.

    Поставьте брейкпойнт на серверной стороне и убедитесь, что она вообще вызывается - мало ли, по ошибке дергаете не ту копию сервиса.

    Проверьте fiddler-ом, что на самом деле уходит от клиента, и приходит от сервера.

    24 сентября 2011 г. 11:03

Все ответы

  • Уважаемый Matyushov Anton, дайте ваше приложение, киньте его например на SkyDrive или просто код
    21 сентября 2011 г. 15:01
  • Конфигурация службы была бы полезной для решения проблемы, можете ее выложить? Также что если создать новую тестовую службу и попробовать ее работу, будет ли она работать правильно? Спасибо.


    Для связи [mail]
    22 сентября 2011 г. 11:50
    Модератор
  • Код веб-службы, к сожалению, не могу выложить.. При отладке возникает еще следующая проблема: веб-метод не получает параметров вообще.

     

    Конфиг: 

    <?xml version="1.0"?>
    <!-- 
        Note: As an alternative to hand editing this file you can use the 
        web admin tool to configure settings for your application. Use
        the Website->Asp.Net Configuration option in Visual Studio.
        A full list of settings and comments can be found in 
        machine.config.comments usually located in 
        \Windows\Microsoft.Net\Framework\v2.x\Config 
    -->
    <configuration>
    	<appSettings/>
    	<connectionStrings/>
    	<system.web>
    		<!-- 
                Set compilation debug="true" to insert debugging 
                symbols into the compiled page. Because this 
                affects performance, set this value to true only 
                during development.
            -->
    		<compilation debug="true">
    			<assemblies>
    				<add assembly="System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
    				<add assembly="System.DirectoryServices, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
    				<add assembly="System.Transactions, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
    				<add assembly="System.Runtime.Remoting, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
    				<add assembly="System.ServiceProcess, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
    				<add assembly="System.Management, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
    				<add assembly="System.Web.RegularExpressions, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
    				<add assembly="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
    				<add assembly="Microsoft.SharePoint.Library, Version=11.0.0.0, Culture=neutral, PublicKeyToken=71E9BCE111E9429C"/></assemblies></compilation>
    		<!--
                The <authentication> section enables configuration 
                of the security authentication mode used by 
                ASP.NET to identify an incoming user. 
            -->
    		<authentication mode="Windows"/>
    		<!--
                The <customErrors> section enables configuration 
                of what to do if/when an unhandled error occurs 
                during the execution of a request. Specifically, 
                it enables developers to configure html error pages 
                to be displayed in place of a error stack trace.
    
            <customErrors mode="RemoteOnly" defaultRedirect="GenericErrorPage.htm">
                <error statusCode="403" redirect="NoAccess.htm" />
                <error statusCode="404" redirect="FileNotFound.htm" />
            </customErrors>
            -->
    	</system.web>
    </configuration>
    
    


    Regards, Matyushov Anton.
    23 сентября 2011 г. 9:17
  • Код приложения:

    using System;
    using System.Web;
    using System.Web.Services;
    using System.Web.Services.Protocols;
    using Microsoft.SharePoint;
    
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    public class SPHelperService : System.Web.Services.WebService
    {
        public SPHelperService() { }
    
        [WebMethod]
        public string CopyListItem(string siteUrl, string srcFolderUrl, int itemId, string destFolderUrl)
        {
            string ret = string.Empty;
            SPWeb web = null;
            try
            {
                SPSite site = new SPSite(siteUrl);
                web = site.OpenWeb();
                web.AllowUnsafeUpdates = true;
                SPListItem srcItem = GetItemFromFolder(web, srcFolderUrl, itemId);
                SPListItem destItem = AddItemToFolder(web, destFolderUrl);
                destItem.Update();
                CopyFields(srcItem, destItem);
                CopyAttachments(web, srcItem, destItem);
            }
            catch (Exception ex)
            {
                ret = ex.ToString();
            }
            finally
            {
                if (web != null) web.Close();
            }
            return ret;
        }
    
        SPListItem GetItemFromFolder(SPWeb web, string folderUrl, int id)
        {
            SPFolder folder = web.GetFolder(folderUrl);
            SPList list = web.Lists[folder.ParentListId];
            return list.Items.GetItemById(id);
        }
    
        SPListItem AddItemToFolder(SPWeb web, string folderUrl)
        {
            SPFolder folder = web.GetFolder(folderUrl);
            SPList list = web.Lists[folder.ParentListId];
            SPListItem item = list.Items.Add(folderUrl, SPFileSystemObjectType.File);
            return item;
        }
    
        void CopyFields(SPListItem srcItem, SPListItem destItem)
        {
            foreach (SPField field in destItem.Fields)
            {
                if (!field.ReadOnlyField && field.Type != SPFieldType.Attachments)
                {
                    try
                    {
                        destItem[field.InternalName] = srcItem[field.InternalName];
                        destItem.Update();
                    }
                    catch { }
                }
            }
        }
    
        void CopyAttachments(SPWeb web, SPListItem srcItem, SPListItem destItem)
        {
            for (int i = 0; i < srcItem.Attachments.Count; i++)
            {
                string fileName = srcItem.Attachments[i];
                SPFile file = web.GetFile(
                    srcItem.Attachments.UrlPrefix.TrimEnd('/') + "/" + fileName);
                byte[] data = file.OpenBinary();
                destItem.Attachments.AddNow(fileName, data);
            }
        }
    }
    
    



    Regards, Matyushov Anton.
    23 сентября 2011 г. 14:56
  • а при вызове с удаленной машины метод веб-сервиса вызвывается или просто вызов оканчивается неудачей? можно ли посмотреть сервис через интернет?

    23 сентября 2011 г. 20:07
  • При вызове с удаленной машины, прокси-класс, вызывая метод, возвращает null, несмотря на то, что для отладки в код службы в самом начале было добавлено следующее:
    return "Hello, world!"
    

    Плюс к этому, при добавлении функции записи параметров метода в файл, значения переменных не заданы...

    К сожалению, данный сервис через интернет недоступен. 

    Данный вопрос требует скорейшего решения, а понять причину данной проблемы, не предоставляется возможным... 

     


    Regards, Matyushov Anton.
    24 сентября 2011 г. 10:10
  • Перегенерите прокси.

    Поставьте брейкпойнт на серверной стороне и убедитесь, что она вообще вызывается - мало ли, по ошибке дергаете не ту копию сервиса.

    Проверьте fiddler-ом, что на самом деле уходит от клиента, и приходит от сервера.

    24 сентября 2011 г. 11:03